python的一大特點就是語法簡潔,代碼量少,除了內(nèi)置函數(shù)和模塊賦予的強(qiáng)大功能外,其豐富的語法糖也是減少代碼量的關(guān)鍵,本文針對list這一數(shù)據(jù)結(jié)構(gòu),匯總了常見的操作技巧
遍歷指的是循環(huán)處理列表中的每一個元素,最基本的遍歷方法就是for in
循環(huán)了,用法如下
a = [1, 2, 3, 4, 5]
for i in a:
print(i)
另外,針對兩種特殊的遍歷場景,python還提供了簡潔的處理方法,場景1,同時遍歷下標(biāo)和對應(yīng)的元素。在其他語言中,解決思路是通過遍歷下標(biāo),再通過下標(biāo)獲取對應(yīng)的值,在python中,通過enumerate
函數(shù)可以輕松實現(xiàn)同時獲取下標(biāo)和對應(yīng)的值,用法如下
for i, v in enumerate(a):
print(i, v)
場景2,同時遍歷兩個list, 在其他語言中同樣也是通過遍歷下標(biāo)來實現(xiàn),在python中通過zip
函數(shù)實現(xiàn),代碼量更少,用法如下
a = [1, 2, 3]
b = [4, 5, 6]
for x, y in zip(a, b):
print(x, y)
對于列表元素的遍歷,一個經(jīng)典的使用場景是遍歷一個列表,對每個元素稍加處理,結(jié)果另存為一個新的列表,你可能會寫出如下代碼
new =[ ]
for i in old:
new.append(i + 1)
對于上述場景,python中有更加簡潔的實現(xiàn)方式,第一種方法稱之為列表生成式,最基本的用法如下
>>> a = [1, 2, 3, 4, 5]
>>> b = [i ** 2 for i in a]
>>> b
[1, 4, 9, 16, 25]
上述代碼遍歷列表a
, 求每個元素的乘方,將結(jié)果存為列表b, 可以看到,一行代碼就可以搞定。列表生成式還可以更加強(qiáng)大,比如添加過濾條件,用法如下
>>> a = [1, 2, 3, 4, 5]
>>> b = [i ** 2 for i in a if i % 2 == 0]
>>> b
[4, 16]
上述代碼同樣是遍歷列表a
, 但是只篩選其中的偶數(shù)項來處理。列表生成式還可以在生成結(jié)果時添加簡單的邏輯判斷, 用法如下
>>> a = [1, 2, 3, 4, 5]
>>> b = [i ** 2 if i % 2 == 0 else i ** 3 for i in a]
>>> b
[1, 4, 27, 16, 125]
列表生成式支持多層for循環(huán), 用法如下
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = [m * n for m in a for n in b]
>>> c
[4, 5, 6, 8, 10, 12, 12, 15, 18]
列表生成式可以嵌套,用法如下
>>> c = [[m * n for m in a]for n in b]
>>> c
[[4, 8, 12], [5, 10, 15], [6, 12, 18]]
對于簡單的循環(huán)加邏輯判斷,用代碼生成式是最佳選擇。
將列表中的元素賦值給各個變量,稱之為解列表,基本用法如下
>>> a, b, c, d = [1, 2, 3, 4]
上述代碼將列表中的元素依次賦值給4個變量,可以看到,這種寫法在處理個數(shù)較少的列表是比較適用,如果我們只想要其中的某幾個值,可以用雙下劃線__
作為變量名,對應(yīng)的值就會被丟棄,用法如下
a, __, __, d = [1, 2, 3, 4]
在此基礎(chǔ)上,還有一種進(jìn)階用法,稱為星號解壓縮,基本用法如下
a, *__, d = [1, 2, 3, 4]
星號起到了通配符的作用,可以匹配任意個元素,上述代碼中的星號匹配中間的2個變量。
當(dāng)然,對于列表的操作技巧遠(yuǎn)不止這幾種,這里列出的幾種比較基礎(chǔ),掌握起來比較輕松。
·end·
聯(lián)系客服