像這樣操作 Python 列表,能讓你的代碼更優(yōu)雅 | pythonic 小技巧
寫 Python 代碼,列表的出鏡率是相當(dāng)高的,伴隨列表一起出現(xiàn)的往往就是一大堆 for 循環(huán),這樣的代碼多了看起來非常不簡(jiǎn)潔。作為一名 Python 程序員,怎么能忍受呢?
那有沒有什么好辦法呢?除了列表表達(dá)式之外,其實(shí)還有一些小技巧來操作列表,可以使代碼更簡(jiǎn)潔,更優(yōu)雅。下面介紹幾個(gè)常見的使用場(chǎng)景,分享給大家。
一、列表合并
第一種方式:循環(huán)。
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> for i in b:
... a.append(i)
...
>>> a
[1, 2, 3, 4, 5, 6]
這種方式最不友好了,也不建議使用。
第二種方式:使用 +。
>>> a + b
[1, 2, 3, 4, 5, 6]
第三種方式:使用 extend 關(guān)鍵字。
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
后兩種方式明顯更加優(yōu)雅,推薦使用。需要說明的一點(diǎn)是,如果列表很大的話,+ 會(huì)比較慢,使用 extend 更好。
二、列表元素去重
使用 set() 對(duì)列表元素進(jìn)行去重。
>>> a = [1, 2, 3, 4, 2, 3]
>>> list(set(a))
[1, 2, 3, 4]
三、列表排序
使用 sort() 或內(nèi)建函數(shù) sorted() 對(duì)列表進(jìn)行排序。它們之間的區(qū)別有兩點(diǎn):
sort()方法是對(duì)原列表進(jìn)行操作,而sorted()方法會(huì)返回一個(gè)新列表,不是在原來的基礎(chǔ)上進(jìn)行操作。sort()是應(yīng)用在列表上的方法,而sorted()可以對(duì)所有可迭代的對(duì)象進(jìn)行排序操作。
# sort()
>>> a = [1, 2, 3, 4, 2, 3]
>>> a.sort()
>>> a
[1, 2, 2, 3, 3, 4]
>>>
>>> a = [1, 2, 3, 4, 2, 3]
>>> a.sort(reverse=True)
>>> a
[4, 3, 3, 2, 2, 1]
# sorted()
>>> a = [1, 2, 3, 4, 2, 3]
>>> sorted(a)
[1, 2, 2, 3, 3, 4]
>>> a = [1, 2, 3, 4, 2, 3]
>>> sorted(a, reverse=True)
[4, 3, 3, 2, 2, 1]
四、遍歷列表的索引和元素對(duì)
使用 enumerate() 函數(shù)可以同時(shí)輸出索引和元素值。
>>> a = ['python', 'go', 'java']
>>> for i, v in enumerate(a):
... print(i, v)
# output
0 python
1 go
2 java
五、查找列表中出現(xiàn)最頻繁的元素
使用 max() 函數(shù)可以快速查找出一個(gè)列表中出現(xiàn)頻率最高的某個(gè)元素。
>>> a = [1, 2, 3, 4, 3, 4, 5, 4, 4, 2]
>>> b = max(set(a), key=a.count)
>>> b
4
需要說明的一點(diǎn)是,當(dāng)列表中有兩個(gè)元素出現(xiàn)的次數(shù)相同時(shí),會(huì)返回第一個(gè)出現(xiàn)的元素。
>>> a = [1, 2]
>>> b = max(set(a), key=a.count)
>>> b
1
六、統(tǒng)計(jì)列表中所有元素的出現(xiàn)次數(shù)
前面的代碼給出了出現(xiàn)最頻繁的值。如果想要知道列表中所有元素的出現(xiàn)次數(shù),那么可以使用 collections 模塊。collections 是 Python 中的一個(gè)寶藏模塊,它提供了很多特性。Counter 方法正好可以完美解決這個(gè)需求。
>>> from collections import Counter
>>>
>>> a = [1, 2, 3, 4, 3, 4, 5, 4, 4, 2]
>>> Counter(a)
Counter({4: 4, 2: 2, 3: 2, 1: 1, 5: 1})
七、將兩個(gè)列表合并為詞典
使用 zip() 函數(shù),可以將兩個(gè)列表合并成字典。
>>> a = ['one', 'tow', 'three']
>>> b = [1, 2, 3]
>>> dict(zip(a, b))
{'one': 1, 'tow': 2, 'three': 3}
以上。
題圖:Antranias From Pixabay
往期精彩:
求求你了,不要再寫循環(huán)求兩個(gè)列表的交集,并集和差集了 | pythonic 小技巧
