像這樣操作 Python 列表,能讓你的程式碼更優雅 | pythonic 小技巧

語言: CN / TW / HK

寫 Python 程式碼,列表的出鏡率是相當高的,伴隨列表一起出現的往往就是一大堆 for 迴圈,這樣的程式碼多了看起來非常不簡潔。作為一名 Python 程式設計師,怎麼能忍受呢?

那有沒有什麼好辦法呢?除了列表表示式之外,其實還有一些小技巧來操作列表,可以使程式碼更簡潔,更優雅。下面介紹幾個常見的使用場景,分享給大家。

一、列表合併

第一種方式:迴圈。

>>> 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 關鍵字。

>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

後兩種方式明顯更加優雅,推薦使用。需要說明的一點是,如果列表很大的話,+ 會比較慢,使用 extend 更好。

二、列表元素去重

使用 set() 對列表元素進行去重。

>>> a = [1, 2, 3, 4, 2, 3]
>>> list(set(a))
[1, 2, 3, 4]

三、列表排序

使用 sort() 或內建函式 sorted() 對列表進行排序。它們之間的區別有兩點:

  1. sort() 方法是對原列表進行操作,而 sorted() 方法會返回一個新列表,不是在原來的基礎上進行操作。
  2. sort() 是應用在列表上的方法,而 sorted() 可以對所有可迭代的物件進行排序操作。
# 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]

四、遍歷列表的索引和元素對

使用 enumerate() 函式可以同時輸出索引和元素值。

>>> a = ['python', 'go', 'java']
>>> for i, v in enumerate(a):
...     print(i, v)

# output
0 python
1 go
2 java

五、查詢列表中出現最頻繁的元素

使用 max() 函式可以快速查找出一個列表中出現頻率最高的某個元素。

>>> a = [1, 2, 3, 4, 3, 4, 5, 4, 4, 2]
>>> b = max(set(a), key=a.count)
>>> b
4

需要說明的一點是,當列表中有兩個元素出現的次數相同時,會返回第一個出現的元素。

>>> a = [1, 2]
>>> b = max(set(a), key=a.count)
>>> b
1

六、統計列表中所有元素的出現次數

前面的程式碼給出了出現最頻繁的值。如果想要知道列表中所有元素的出現次數,那麼可以使用 collections 模組。collections 是 Python 中的一個寶藏模組,它提供了很多特性。Counter 方法正好可以完美解決這個需求。

>>> 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})

七、將兩個列表合併為詞典

使用 zip() 函式,可以將兩個列表合併成字典。

>>> a = ['one', 'tow', 'three']
>>> b = [1, 2, 3]
>>> dict(zip(a, b))
{'one': 1, 'tow': 2, 'three': 3}

以上。

希望對你能有幫助,歡迎關注公眾號 AlwaysBeta,更多技術乾貨等你來。