Python 列表

Python 列表
Python的列表對象是這個語言提供的最通用的序列.列表是一個任意類型的對象的位置相關的有序集合,沒有固定大小.不像字符串,其大小是可變的,通過對偏移量進行賦值及其各種方法進行調用,確實能夠修改列表的大小
1.序列操作
列表是序列的一種,支持所有對字符串討論過的操作,唯一區別是其結果是列表
例如:一個有三個元素的列表
L=[123,’spam’,1.23]
len(L)
3
對列表可以進行索引,切片等操作,如之前的字符串那樣
L[0]
123

L[:-1]
[123,’spam’]

L+[4,5,,6]
[123, ’spam’, 1.23, 4, 5, 6]

L
[123,’spam’,1.23]

2.特定類型的操作
列表類似其他語言的數組,但要強大的多,其中一個方面是,列表沒有固定類型的約束(如上述例子中列表包含三個完全不同類型的對象,一個整數,一個字符串,一個浮點數),列表沒有固定大小,能夠按照需要增加或減少列表大小,來影響其特定的操作.
L.append(‘NI’)
L
[123,’spam’,1.23,’NI’]

L.pop(2)
1.23

L
[123,’spam’,’NI’]

append方法擴充列表大小並在列表末尾插入一項;
pop方法(或者等效的del語句)移除給定偏移量的一項,從而讓列表減小;
其他的列表方法可以在任意位置插入(insert)元素,按照值移除(remove)元素
大多數列表的方法都會就地改變列表對象,而不是創建一個新列表:
M=[‘bb’,’cc’,’aa’]
M.sort()
M
[‘aa’,’bb’,’cc’]

M.reverse()
M
[‘cc’,’bb’,’aa’]

這裏的列表sort方法默認按升序對列表排序
而reverse方法對列表進行反轉
都是直接對列表進行改變
3.邊界檢查
Python不允許不存在的元素,超出列表之外的索引會導致錯誤,對列表末尾範圍之外進行賦值也是錯誤的
L
[123,’spam’,’NI’]
L[99]
...error..

L[99]=1
...error...
在python中,並不是默默地增大列表作爲響應,而是會提示錯誤,要增大列表,可調用append方法

4.嵌套
特性:支持任意嵌套
例如:能夠讓一個列表包含一個字典,並在這個字典中包含另一個列表,特性的直接應用就是實現矩陣,或python中的多維數組
M=[[1,2,3],
[4,5,6],
[7,8,9]]
M
[[1,2,3],[4,5,6],[7,8,9]]
其效果實現3*3的數字矩陣,可通過多種方法獲取元素
M[1] 讀取整個第二行
[4,5,6]

M[1][2] 讀取第二行的第三個元素
6
串聯起索引操作可以逐層深入的獲取嵌套的對象結構(這種矩陣結構適用於小規模任務,對於大型結構,可以使用NumPy)
5.列表解析
通過對序列中的每一項運行一個表達式來創建一個新的列表的方法,每次一個,從左至右.列表解析是編寫在方括號中的(),並且由使用同一個變量名的(這裏是row)表達式和循環結構組成

>> m=[[1,2,3],[4,5,6],[7,8,9]]
>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>> col2=[row[1] for row in m]
>> col2
[2, 5, 8]
>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

意思是:把矩陣m的每個row中的row[1],放在一個新列表中.

實際應用更復雜,如:

>> [row[1]+1 for row in m]
[3, 6, 9]
此操作是把蒐集到的(第二列)每個元素都加了1
>> row[1]
8
>> [row[1] for row in m if row[1]%2==0]
[2, 8]
此操作是使用if條件語句,通過使用%求餘表達式(取餘數)過濾結果中的奇數
>> row[0]
7
>> row
[7, 8, 9]

列表解析創建新的列表作爲結果,但是能夠在任何可迭代對象上迭代,例如:
使用列表解析區步進座標的一個應編碼列表和一個字符串

>> diag=[m[i][i] for i in [0,1,2]] (從矩陣中收集對角線)
>> diag
[1, 5, 9]
>> doubles=[c*2 for c in 'spam'] (在一個字符串中重複字符)
>> doubles
['ss', 'pp', 'aa', 'mm']

內置sum函數,按一種順序彙總各項

>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>> G = (sum(row) for row in m)
>> next(G)
6
>> next(G)
15
>> next(G)
24

括號中的解析語法也可以用來創建產生所需結果的生成器(用內置函數map產生對各項運行一個函數的結果)

>> list(map(sum,m))
[6, 15, 24]

解析語法也可以用來創建集合和字典:

>> {sum(row) for row in m}
set([24, 6, 15])
>> {i:sum(m[i]) for i in range(3)}
{0: 6, 1: 15, 2: 24}

L列表,集合和字典都可以用解析來創建:

>> [ord(x) for x in 'spam']
[115, 112, 97, 109]
>> {ord(x) for x in 'spam'}
set([112, 97, 115, 109])
>> [ord(x) for x in 'spaam']
[115, 112, 97, 97, 109]
>> {ord(x) for x in 'spaam'}
set([112, 97, 115, 109])
>> {x:ord(x) for x in 'spaam'}
{'a': 97, 'p': 112, 's': 115, 'm': 109}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章