從 Python 列表中刪除重複項的 5 種方法
已發表: 2022-07-05在本教程中,您將學習如何從 Python 列表中刪除重複項。
當您在 Python 中使用列表時,您有時可能需要僅使用列表中的唯一項——通過刪除重複項。
有幾種不同的方法可以做到這一點。 在本教程中,我們將介紹五種此類技術。
Python 列表基礎
讓我們通過回顧 Python 列表的基礎知識開始我們的討論。
Python 列表是可變的。 因此,您可以通過在列表中添加和刪除元素來修改它們。 此外,Python 列表是元素的集合,不一定是唯一的。
那麼如何只保留獨特的元素並刪除重複或重複的元素呢?
好吧,你可以通過幾種不同的方式來做到這一點。 您可以創建一個僅包含原始列表中唯一元素的新列表。 或者您可以選擇就地修改原始列表並刪除重複的項目。
我們將在本教程中詳細了解這些內容。
從 Python 列表中刪除重複項的方法
讓我們舉一個現實世界的例子。 假設你在朋友的生日聚會上。
在顯示的糖果集合中,您會看到一些重複的項目。 您現在想從糖果列表中刪除那些重複的項目。

讓我們創建一個包含上圖中所有項目的sweets
列表。
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
在上面的sweets
列表中,項目“糖果”和“紙杯蛋糕”重複了兩次。 讓我們使用這個示例列表來刪除重複的項目。
迭代 Python 列表以刪除重複項
最直接的方法是創建一個新列表,其中每個項目只包含一次。
通讀下面的代碼單元:
unique_sweets = [] for sweet in sweets: if sweet not in unique_sweets: unique_sweets.append(sweet) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
- 我們初始化一個空列表
unique_sweets
。 - 在遍歷
sweets list
時,我們訪問每個sweet
。 - 如果
sweet
尚未出現在unique_sweets
列表中,我們使用.append()
方法將其添加到unique_sweets
列表的末尾。
假設您遇到一個重複的項目,例如, sweets
列表中第二次出現“糖果”。 這不會添加到unique_sweets
列表中,因為它已經存在:對於第二次出現“cupcake”和“candy” sweet not in unique_sweets
計算結果為False
。
因此,在這種方法中,每個項目在unique_sweets
列表中只出現一次——沒有任何重複。
使用列表理解刪除重複項
您還可以使用列表推導來填充unique_sweets
列表。
想要刷新列表理解的基礎知識?
️ 查看 Python 中的列表推導教程。
讓我們使用列表推導表達式: [output for item in iterable if condition is True]來簡潔地重寫上面的循環。
unique_sweets = [] [unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets] print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
即使您正在創建一個新列表,您也不會使用值填充創建的列表。 這是因為輸出是unique_sweets
列表的.append()
操作。
要從 Python 列表中刪除重複項,您還可以使用內置列表方法,我們將在下一節中介紹這一點。
使用內置列表方法刪除重複項
您可以使用 Python 列表方法.count()
和.remove()
刪除重複項。
– 使用語法list.count(value) ,.count
.count()
方法返回value
在list
出現的次數。 所以重複項對應的計數將大於 1。– list.remove(value)從列表中刪除第一次出現的值。
使用上面的代碼,我們有以下代碼。
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) if sweets.count(sweet) > 1: # if True, remove the first occurrence of sweet sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
由於.remove()
方法僅刪除第一次出現的值,因此您不能使用它刪除出現兩次以上的項目。
- 如果特定項目重複(恰好出現兩次),則此方法將刪除第一次出現。
- 如果一個特定的項目重複了
K
次,那麼在運行上面的代碼之後,仍然會保留K-1
次重複。
但總的來說,當我們說重複時,我們通常指的是所有重複。

要處理這種情況,您可以修改上述循環以刪除除一個之外的所有重複。 您可以運行一個while
循環來重複刪除重複項,直到列表中每個項目的計數為 1,而不是使用if
條件來檢查特定項目的計數。
sweets
列表現在包含 2 個重複的“cupcake”和 3 個重複的“candy”。
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
您可以使用while
循環來刪除重複,如下所示。 只要 sweets 中的 sweet 計數大於 1,while 循環就會繼續運行。當只剩下一次時,條件 sweets.count(sweet) > 1 變為 False,循環跳到下一項。
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) while(sweets.count(sweet) > 1): # repeatedly remove the first occurrence of sweet until one occurrence remains. sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
但是使用嵌套循環可能不是很有效,因此如果您正在處理大型列表,您可以考慮使用討論過的其他技術之一。
到目前為止,我們已經了解了以下內容:
- 從 Python 列表中刪除重複項的方法——通過創建新列表——僅包含唯一項
- 內置列表方法
.count()
和.remove()
地修改列表
有一些 Python 內置數據結構要求值都是唯一的——不重複。 因此,我們可以將 Python 列表強制轉換為這些數據結構之一以刪除重複項。 然後將它們轉換回列表。 我們將在接下來的部分中學習如何做到這一點。
將 Python 列表轉換為一組以刪除重複項
Python 集是所有唯一元素的集合。 因此,集合中存在的項目數(由len(<set-obj>
) 給出)等於存在的唯一元素數。
您可以使用以下語法將任何 Python 可迭代對象轉換為集合:
set(iterable)
。
現在,讓我們將列表 sweets 轉換為一個集合併檢查輸出。
set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
從上述代碼單元格的輸出中,我們看到每個項目只出現一次,並且重複項已被刪除。
另外,請注意,項目的順序不一定與它們在原始列表糖果中的順序相同。 這是因為,除了作為唯一元素的集合之外,Python 集合對像還是一個無序集合。
現在我們已經通過將列表轉換為集合來刪除重複項,我們可以再次將其轉換為列表,如下所示。
unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
使用列表項作為字典鍵來刪除重複項
Python 字典是鍵值對的集合,其中鍵唯一地標識值。
您可以使用.fromkeys()
方法創建 Python 字典,語法如下: dict.fromkeys(keys, values)
。 這裡, keys
和values
是分別包含字典的鍵和值的可迭代對象。
-
keys
是必需參數,它可以是任何與字典鍵對應的 Python 可迭代對象。 -
values
是一個可選參數。 如果您不指定可迭代的值,則使用默認值None
。
在不指定值的情況下, dict.fromkeys(sweets)
返回一個 Python 字典,其中值設置為None
- 默認值。 下面的代碼單元解釋了這一點。
dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
和上一節一樣,我們可以再次將字典轉換為列表,如下所示。
unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
從上面的輸出中,我們可以看到重複項已從列表sweets
中刪除。
加起來
以下是可用於從 Python 列表中刪除重複項或重複項的不同方法的概述。
- 使用 Python 列表方法.append()將非重複項添加到新列表中。 新列表僅包含原始列表中的每個項目一次,並刪除所有重複項。 您也可以使用列表推導來做到這一點。
- 使用內置的.count()和.remove()方法刪除恰好出現兩次的項目。 可以將其放置在while循環中以刪除所有其他事件。
- 將 Python 列表轉換為集合以僅保留唯一元素。
- 使用dict.fromkeys(list)從列表中刪除任何重複項,因為字典不應該有重複鍵。
接下來,查看 Python 項目以進行練習和學習。 或者學習如何在 Python 列表中查找項目的索引。 快樂學習!