12.python中的列表

来源:http://www.cnblogs.com/scolia/archive/2016/05/28/5538305.html
-Advertisement-
Play Games

先看列表是如何創建的: 同樣有兩種創建方式,但一般用第一種。 列表和元祖最大的不同就是列表是可以修改的。 老規矩,使用 help(list) ,真的是 help() 大法好呀。 好,來人,上代碼。 Help on class list in module __builtin__: class lis ...


  先看列表是如何創建的:  

a = ['scolia', 123]
b = list('scolia',123)

  同樣有兩種創建方式,但一般用第一種。

  列表和元祖最大的不同就是列表是可以修改的。

  老規矩,使用 help(list) ,真的是 help() 大法好呀。

  好,來人,上代碼。

Help on class list in module __builtin__:

class list(object)
 |  list() -> new empty list
 |  list(iterable) -> new list initialized from iterable's items
 |  
 |  Methods defined here:
 |  
 |  __add__(...)
 |      x.__add__(y) <==> x+y
 |  
 |  __contains__(...)
 |      x.__contains__(y) <==> y in x
 |  
 |  __delitem__(...)
 |      x.__delitem__(y) <==> del x[y]
 |  
 |  __delslice__(...)
 |      x.__delslice__(i, j) <==> del x[i:j]
 |      
 |      Use of negative indices is not supported.
 |  
 |  __eq__(...)
 |      x.__eq__(y) <==> x==y
 |  
 |  __ge__(...)
 |      x.__ge__(y) <==> x>=y
 |  
 |  __getattribute__(...)
 |      x.__getattribute__('name') <==> x.name
 |  
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |  
 |  __getslice__(...)
 |      x.__getslice__(i, j) <==> x[i:j]
 |      
 |      Use of negative indices is not supported.
 |  
 |  __gt__(...)
 |      x.__gt__(y) <==> x>y
 |  
 |  __iadd__(...)
 |      x.__iadd__(y) <==> x+=y
 |  
 |  __imul__(...)
 |      x.__imul__(y) <==> x*=y
 |  
 |  __init__(...)
 |      x.__init__(...) initializes x; see help(type(x)) for signature
 |  
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 |  
 |  __le__(...)
 |      x.__le__(y) <==> x<=y
 |  
 |  __len__(...)
 |      x.__len__() <==> len(x)
 |  
 |  __lt__(...)
 |      x.__lt__(y) <==> x<y
 |  
 |  __mul__(...)
 |      x.__mul__(n) <==> x*n
 |  
 |  __ne__(...)
 |      x.__ne__(y) <==> x!=y
 |  
 |  __repr__(...)
 |      x.__repr__() <==> repr(x)
 |  
 |  __reversed__(...)
 |      L.__reversed__() -- return a reverse iterator over the list
 |  
 |  __rmul__(...)
 |      x.__rmul__(n) <==> n*x
 |  
 |  __setitem__(...)
 |      x.__setitem__(i, y) <==> x[i]=y
 |  
 |  __setslice__(...)
 |      x.__setslice__(i, j, y) <==> x[i:j]=y
 |      
 |      Use  of negative indices is not supported.
 |  
 |  __sizeof__(...)
 |      L.__sizeof__() -- size of L in memory, in bytes
 |  
 |  append(...)
 |      L.append(object) -- append object to end
 |  
 |  count(...)
 |      L.count(value) -> integer -- return number of occurrences of value
 |  
 |  extend(...)
 |      L.extend(iterable) -- extend list by appending elements from the iterable
 |  
 |  index(...)
 |      L.index(value, [start, [stop]]) -> integer -- return first index of value.
 |      Raises ValueError if the value is not present.
 |  
 |  insert(...)
 |      L.insert(index, object) -- insert object before index
 |  
 |  pop(...)
 |      L.pop([index]) -> item -- remove and return item at index (default last).
 |      Raises IndexError if list is empty or index is out of range.
 |  
 |  remove(...)
 |      L.remove(value) -- remove first occurrence of value.
 |      Raises ValueError if the value is not present.
 |  
 |  reverse(...)
 |      L.reverse() -- reverse *IN PLACE*
 |  
 |  sort(...)
 |      L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
 |      cmp(x, y) -> -1, 0, 1
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __hash__ = None
 |  
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T
list

  按照其功能可以將內置方法分為以下幾類:

  1.序列相關方法,如索引,切片,加法,乘法,成員判斷(這些都在python的序列中講過,不再重覆)

  2.內置函數相關(同樣將放在python的內置函數中總結)

  3.普通的內置方法。

  我在上篇python的元祖中分享了自己關於元祖的理解,並把其比喻成是一個菜單,而列表其實和元祖是類似的。

  只不過元祖就像是守舊派,菜式堅持傳統,所以其菜單也不會改變。但列表則像是革新派,要靠層出不窮的菜式來吸引顧客,所以其菜單會經常修改。

  那為什麼要分開兩種呢,直接都用列表不就好了,我不改就是,這樣不更方便嗎?

  雖然說列表支持更多的操作,但是元祖相較於列表還是有以下優點的:

  1.數據更安全

    正是因為元祖是不可修改的,所以可以防止一些誤操作。例如我有些參數非常重要,我將其放在列表裡面,我在取的時候可能會出現誤操作修改掉裡面的參數,從而導致各種錯誤。而將這些重要的,確認不用修改的數據放在元祖里,我的數據就會更加安全。

  2.性能更高

    列表既然可以修改,肯定要對記憶體進行更多的操作,而這些操作肯定會消耗更多的資源。而元祖是不可變的,一旦在記憶體中創建以後,就不會有多餘的記憶體操作了。所以進行查詢的時候,元祖的效率會比列表更高

  兩種各有特色,可以根據需求選用。


  列表相較元祖的最大不同就是其是可修改的,而修改的核心操作為:增刪改查。

一.增

1.1 L.append(object) -- append object to end 

    往列表的最後插入一個元素。   

a = ['scolia','中文']
a.append(123)
print a
a.append(['新列表',])
print a
print a[1]
print   

  這裡有一個幾個問題要註意一下:

  1.列表中的中文在存儲的時候,存的是中文的編碼(具體的編碼是文件開頭聲明的),元祖也是一樣。

    

    但是使用 print 的時候兩者的行為又不同。

    

    元祖能正確列印,而列表不能。

    當然在用索引取到對象後則沒有這些問題了。

  2.['新列表',] 的寫法

   是不是和元祖一樣只有一個元素的時候一定要加逗號。列表可以不用。

  

   列表不寫也沒有關係,但是元祖在只有一個元素的時候一定要用逗號分隔!!

    3.a[3][0] 寫法的含義

    這個寫法其實充分地體現出一個元素就是一個獨立的對象。首先 a 是一個列表,我們可以用索引的方法取到一個對象 a[3] ,但a[3]取到的還是一個列表,那我是不是可以繼續對這個取到的列表進行索引取元素。

    所謂的連綴其原理也是這樣的,到時候會繼續分析。

 

2. L.insert(index, object) -- insert object before index 

  在特定的索引位置插入一個新元素,原來的元素都向後移一個位置。

a = ['scolia', 123]
a.insert(1, 'good')
print a
a.insert(10, 456)
print a

 

  對於超出的索引值python會優雅地將其放在最後,此時相當於 append 。

  但如果是負值的超出索引:

a = ['scolia', 123]
a.insert(-10, 456)
print a

 

  會放在最頭,這也是python優雅的地方

 

3. L.extend(iterable) -- extend list by appending elements from the iterable 

  將一個可迭代的對象的所有元素逐一添加到列表的最後,關於迭代器我們以後會說明。

  這裡先記著比較常用的:

a = ['scolia']
b = ['good',123,456]
a.extend(b)
print a
print b

  可以將兩個列表合併成一個,當然 b 這裡是元祖也可以,只要是可迭代的對象。另外還有註意並沒有影響到b對象本身。

 


 

二、刪

1.  L.pop([index]) -> item -- remove and return item at index (default last) 

    刪除給定索引對應的元素,並將其返回,不給索引時預設刪除並返回列表的最後一個。當列表為空或給定的索引超出範圍時拋出IndexError錯誤。

    註意,這裡的返回意味著我可以用變數去承接返回的這個元素(對象)。

a = ['scolia', 'good', 123, 456]
b = a.pop()
c = a.pop(0)
print a
print b
print c

 

2. L.remove(value) -- remove first occurrence of value. 

    給定一個元素,將找到的第一個刪除,註意和上面的不同,這裡不會返回被刪除的對象,只會返回一個空對象 None。

a = ['scolia', 123, 123, 123, 456]
print id(a[1]), id(a[2]), id(a[3])
b = 123
print id(b)
a.remove(b)
print a

 

  關於這裡的 123 為什麼會是同一個對象我在python的序列中已經講過了,這裡寫出了只是為了說明這裡的刪除在本質上只是刪除一個引用對象而已,而何為引用我在python的賦值操作中講過。

3.del 關鍵字

   python中del這個關鍵字是專門用來刪除對象的,而我們說過元素即是對象,所以我們可以通過索引,或者切片的方式取到對象,然後用del關鍵字刪除掉。

a = ['scolia', 456, 123, 123, 123]
del a[1]
print a
del a[1:4]
print a

  註意:每次進行列表的修改都會刷新列表,在僅僅是修改的時候體現不明顯,但在增刪操作的時候,元素的添加或刪除是會刷新整個列表的索引值的

  如這裡,本來a[1]是456,但其被刪掉了,後面元素的索引值就向前一位,所以我們a[1:4]得到的是剩下的三個123。

 


三、改

1.x[i]=y

  修改一個元素。

a = ['scolia', 'good', 123, 456]
a[1] = 'very good'
print a

  註意:這裡的索引一旦超過是會報錯的,要求的是精準操作。

2.x[i:j]=y

  修改多個元素

當數量是對應時:

a = ['scolia', 'good', 123, 456]
a[1:4] = 'very good', 111, 999
print a

 

數量不對應時:

a = ['scolia', 'good', 123, 456]
b = ['scolia', 'good', 123, 456]
a[1:4] = 'very good', 111, 999, 888
b[1:4] = 'very good', 111
print a
print b

 

數量不對應且只有一個時:

a = ['scolia', 'good', 123, 456]
b = ['scolia', 'good', 123, 456]
a[1:4] = 'very good'
print a
b[1:4] =  111
print b

  是數字等非序列時,直接報錯,字元串則逐個字元拆分後填充。

 

當新修改的是字典時:

a = ['scolia	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 聲明:本系列為原創,分享本人現用框架,未經本人同意,禁止轉載!http://yuangang.cnblogs.com 希望大家好好一步一步做,所有的技術和項目,都毫無保留的提供,希望大家能自己跟著做一套,還有,請大家放心,只要大家喜歡,有人需要,絕對不會爛尾,我會堅持寫完~ 如果你感覺文章有幫助,點 ...
  • 元數據,就是C#中封裝的一些類,無法修改.類成員的特性被稱為元數據中的註釋. 1、什麼是特性 (1)屬性與特性的區別 屬性(Property):屬性是面向對象思想里所說的封裝在類裡面的數據欄位,Get,Set方法。 特性(Attribute): 官方解釋:特性是給指定的某一聲明的一則附加的聲明性信息 ...
  • qpython是一個能讓安卓手機運行和編寫python的APP,到網上下載APK安裝或者在GOOGLE PLAY搜索安裝即可。 安裝之後你可以你手機跑自己的python程式。 qpython有兩個大版本的: qpython對應的是python 2.X qpython3對應的是python 3.X 當 ...
  • Session是一個域 作用範圍:當前會話範圍 生命周期:當程式第一次調用request.getSession()創建出客戶端的session對象,30分鐘沒有操作認為超時,這個可以在web.xml中進行配置 調用session.nvalidate()方法銷毀session 伺服器非正常關閉時銷毀s ...
  • 首先參考 http://jingyan.baidu.com/article/456c463b99f4370a583144a8.html 創建一個項目,照著上面教程到最後一步的時候,系統自動生成entity類,dao類,sessionfactory類和對應的配置文件 在下麵新建一個Test1.java ...
  • 在經過了一段時間的開發後,我對Laravel框架的認識又在逐步的加深,對於這個世界占有量NO.1的框架... 我想說,我已經在逐步的感受到他的恐怖之處... 一.建表--Laravel在資料庫建表上有自己獨立內置的結構,可以完全不用藉助原生SQL語句或者SQLyogEnt、Navicat 這樣的建表 ...
  • 使用Eclipse上傳/下載Git項目 前提: + Eclipse已安裝EGit插件 + 已擁有GitLab/GitHub賬號 SSH方式 配置SSH授權 1. 本地生成授權Key Eclipse,選擇菜單: 2. 遠程托管配置本地授權的Public Key 進入GitLab管理首頁, 在 中輸入剛 ...
  • 表達式是PHP中一個重要的概念,可以把表達式理解為“任何有值的東西”。在本教程中涉及到表達式的語法,我們以“expr”來表示表達式。 下麵就是一個表達式: 在上面的例子中,當$x的值大於$y時,該表達式值為TRUE,否則為FALSE。 我們經常通過判斷一個表達式的值(包括具體數值和布爾值)來確定我們 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...