列表
列表是Python中最具靈活性的有序集合物件類型。與字串不同的是,列表可以包含任何類型的對象:數字、字串甚至其他列表。列表是可變對象,它支援原地修改的操作。
Python的列表是:
- 任意對象的有序集合
- 通過位移讀取
- 可變長度、異構以及任意嵌套
- 屬於可變序列的分類
- 對象引用數組(列表中的儲存的是對象的引用,而不是對象的拷貝)
實際應用中的列表
>>基本欄表操作
由於列表是序列,它支援很多與字串相同的操作。列表對”+”和”*“操作的響應與字串很相似,兩個操作的意思也是合并和重複,只不過是一個新的列表,而不是一個字串。
>>索引、分區和矩陣
對於列表而言,索引和分區操作與字串中的操作基本相同。然而對列表進行索引的結果就是你指定的位移處的對象(不管是什麼類型),而對列表分區時往往返回一個新的列表。
matrix = [[1,2,3],[4,5,6],[7,8,9]]
上述代碼定義了一個3*3的二維矩陣。
>>原處修改列表
索引與分區的賦值
當使用列表的時候,可以將它賦值給一個特定項(位移)或整個片段(分區)來改變它的內容,索引和分區的賦值都是原地修改,它們對列表進行直接修改,而不是產生一個新的列表作為結果.Python中的索引賦值與C及大多數其他語言極為相似——Python用一個新值取代指定位移的對象引用
列表方法的調用
最常用的列表方法是append,它能夠簡單地將一個單項(對象引用)加至列表末端。與合并不同的是,append允許傳入單一對象而不是列表。L.append(X)與L+[X]的結果類似,不同的是,前者會原地修改L,而後者會產生新的列表。 另一個比較常用的方法就是sort,它原地對列表進行排序。sort是使用Python標準的比較檢驗作為預設值(在這裡指字串比較),而且以遞增的順序進行排序。另外,我們可以通過傳入一個關鍵字參數來修改排序行為——這是指定按名稱傳遞的函數調用中特殊的”name=value”語言。
需要注意的是:要當心append和sort是原地修改列表對象的,方法的返回結果並沒有返回列表(從技術上講,兩者的傳回值都是None)。如果編寫類似L=L.append(X)的語句,將不會得到修改後的值(實際上,會失去整個列表的引用)。
- reverse:原地反轉列表
- extend:在末端插入多個元素
- pop:刪除最後一個元素,同時返回被刪除的值
- remove:通過值刪除某個元素
- insert:在位移處插入某個元素
- index:尋找某元素的位移
字典
如果把列表看做是有序的對象集合,那麼就可以把字典當成是無序的集合,它們主要的差別就在於:字典當中的元素師通過鍵來存取的,而不是通過位移存取。 Python字典的主要屬性如下:
- 通過鍵而不是位移來讀取
- 任意對象的無序集合
- 可變長、異構、任意嵌套
- 屬於可變映射類型
- 對象參考資料表(散列表)(字典中的儲存的是對象的引用,而不是對象的拷貝)
- 實際應用中的字典
>>原處修改字典
與列表相同,向字典中已存在的索引值賦值會改變與索引相關聯的值。然而,與列表不同的是,每當對新字典鍵進行賦值(之前沒有被賦值的鍵),就會在字典內產生一個新的元素。
>>其他字典的方法
- keys:返回字典的鍵列表
- values:返回字典的值列表
- items:返回字典的(key,value)對元組
- update:合并
- pop:從字典中刪除一個鍵並返回它的值
>>字典用法注意事項
- 序列運算無效
- 對新索引賦值會添加項
- 鍵不一定總是字串
>>建立字典的其他方法
#Method1D = {'name':'mel','age':45}#Method2D = {}D['name']='mel'D['age']=45#Method3D = dict(name='mel',age=45)#Method4D = dict([('name','mel'),('age',45)])
以上四種形式都會建立相同的字典。
>>Python3.0中的字典變化
字典的功能在Python3.0中已經有所變化了,具體來說,Python3.0中的字典:
- 支援一種新的字典解析運算式,這是列表和集合解析的”近親”
- 對於D.key,D.values和D.items方法,返回可迭代的視圖,而不是列表
- 由於前面一點,需要新的編碼方式通過排序鍵來遍曆
- 不再直接支援相對大小比較——取而代之的是手動比較
- 不再有D.has_key方法——相反,使用in成員關係測試
字典視圖
在Python3.0中,字典的keys、values和items都返回視圖對象,而在Python2.6中,它們返回實際的結果清單。Python3.0中的字典視圖並非建立後不能改變,它們可以動態地反映在視圖對象建立之後對字典做出點修改:
D={'a':1,'b':2,'c':3}K = D.keys()V = D.values()del D['b']list(K)
上述代碼中,最後一行的結果是[‘a','c']。
keys方法所返回的對象類似於集合,並且支援交集和並集等常見的操作;values視圖不是這樣,因為它們不是唯一的;但items結果是的,如果(key,value)對是唯一的並且可散列的話。
元組
元組由簡單的對象構成。元組與列表非常類似,只不過元組不能再原處修改(它們是不可變的),通常是寫成圓括弧(而不是方括弧)中一系列項。它的屬性有:
- 任意對象的有序集合
- 通過位移存取
- 屬於不可變序列類型
- 固定長度、異構、任意嵌套
- 對象引用的數組
>>實際應用中的元組
元組的特殊文法:逗號和圓括弧
因為圓括弧也可以把運算式括起來,如果圓括弧裡的單一對象時元組對象而不是一個簡單的運算式,需要對Python進行特別說明。如果確實想得到一個元組,只要在這一單個元素之後、關閉圓括弧之前加上一個逗號就可以了。
x = (40)y = (40,)
上述代碼中,第一行的x是一個整數,第二行的y則是一個包含了一個元素40的元組。
轉換、方法以及不可變性
元組的操作和字串及列表是一致的,值得注意的區別在於”+”、”*“以及分區操作應用於元組時將返回新元組,並且元組不提供字串、列表和字典中的方法。
>>為什麼有了列表還要元組
元組的不可變性提供了某種完整性,這樣你可以確保元組在程式中不會被另一個引用修改,而列表就沒有這樣的保證了。