1. 程式人生 > >必知必會的8個Python列表技巧

必知必會的8個Python列表技巧

> **原作者:**Nik Piepenbreier > > **翻譯&內容補充:**費弗裡 > > **原文地址:**https://towardsdatascience.com/advanced-python-list-techniques-c6195fa699a3   列表(List)是你使用`Python`過程中接觸最為頻繁的資料結構,也是功能最為強大的幾種資料結構之一。`Python`列表非常的萬能且蘊含著許多隱藏技巧,下面我們就來探索一些常用的列表技巧。 --- ## 1 列表元素的過濾 ### 1.1 filter()的使用   `filter()`函式接受2個引數:1個函式物件以及1個可迭代的物件,接下來我們定義1個函式然後對1個列表進行過濾。   首先我們建立1個列表,並且剔除掉小於等於3的元素:
圖1
  回顧一下發生了什麼:   1. 我們定義了列表`original_list`   2. 接著我們定義了一個接受數值型引數`number`的函式`filter_three`,當傳入的引數值大於3時會返回True,反之則會返回False   3. 我們定義了`filter`物件`filtered`,其中`filter()`接受的第一個引數是函式物件,第二個引數是列表物件   4. 最終我們將`filter`物件轉化為列表,最終得到經`filter_three`過濾後`original_list`內留下的元素。 ### 1.2 使用列表推導式   類似的,我們也可以利用列表推導式來過濾列表元素,作為一種生成和修改列表優雅的方式,列表推導式想必大家都比較熟悉了,下面是使用列表推導完成同樣任務的過程:
圖2
## 2 修改列表 ### 2.1 map()的使用   `Python`中內建的`map()`函式使得我們可以將某個函式應用到可迭代物件內每一個元素之上。   比方說我們想獲取到一個列表物件中每一個元素的平方,就可以使用到`map()`函式,就像下面的例子一樣:
圖3
  類似`filter()`的工作過程,下面我們來看看發生了什麼:   1. 首先我們定義了列表`original_list`,以及接受數值型引數並返回其平方值的函式`square()`   2. 接著我們定義了`map`物件`squares`,類似`filter()`,`map()`接受的第一個引數是函式物件,第二個引數是列表物件   3. 最終我們將`map`物件`squares`列表化,就得到了想要的結果 ### 2.2 使用列表推導式   同樣的我們也可以使用列表推導式完成同樣的任務:
圖4
## 3 利用zip()來組合列表   有些情況下我們需要將兩個或以上數量的列表組合在一起,這類需求使用`zip()`來完成非常方便。   `zip()`函式接收多個列表作為引數傳入,進而得到每個位置上一一對應的元素組合,就像下面的例子一樣:
圖5
## 4 顛倒列表   `Python`中的列表是有序的資料結構,正因如此,列表中元素的順序很重要,有些時候我們需要翻轉列表中所有元素的順序,可以通過`Python`中的切片操作,用`::-1`來快捷地實現:
圖6
## 5 檢查列表中元素的存在情況   有些情況下我們想要檢查列表中是否存在某個元素,這種時候就可以使用到`Python`中的`in`運算子,譬如說我們有一個記錄了所有比賽獲勝隊伍名稱的列表,當我們想查詢某個隊名是否已獲勝時,可以像下面的例子一樣:
圖7
## 6 找出列表中出現次數最多的元素   有些情況下我們想要找出列表中出現次數最多的元素,譬如對記錄若干次拋硬幣結果的列表,找出哪一種結果出現次數最多,就可以參考下面的例子:
圖8
## 7 展平巢狀列表   有些情況下我們會遇到一些巢狀的列表,其每個元素又是各自不同的列表,這種時候我們就可以利用列表推導式來把這種巢狀列表展平,如下面2層巢狀的例子:
圖9
> **額外補充**: > >   原作者這裡只考慮到兩層巢狀的列表,如果是更多層巢狀,就需要有多少層寫多少for迴圈,比較麻煩,其實還有一種更好的方法,我們可以使用`pip install dm-tree`來安裝`tree`這個專門用於展平巢狀結構的庫,可以展平任意層巢狀列表,使用例子如下:
圖10
## 8 檢查唯一性   如果你想要檢視列表中的值是否都是唯一值,可以使用`Python`中的`set`資料結構的特點,譬如下面的例子:
圖11
  以上就是本文的全部內容,如有疑問歡迎在評論區