Python 去除重複項的最佳方法:從初學者到中階使用者的完整指南

1. 前言

在使用 Python 進行資料處理時,清單(list)中的重複元素常常會造成困擾。若資料中存在重複值,可能會導致處理速度變慢,甚至分析結果不準確。
本文將介紹如何使用 Python 移除清單中的重複元素。從容易上手的基本方法,到稍微進階的技巧,我們會一併說明,讓初學者也能輕鬆理解。

2. 移除重複元素的基本方法

首先,我們來看使用 Python 內建函式來移除重複元素的簡單方法。

使用 set() 移除重複

在 Python 中,利用 set 類型可以輕鬆地移除清單中的重複元素。

範例

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set(original_list))
print(unique_list)  # 輸出範例: [1, 2, 3, 4, 5]

說明

set 是一種集合資料型別,不允許重複元素。透過這個特性,我們可以快速移除清單中的重複值。

注意事項

  • 使用 set() 時,原本清單中的順序會被打亂。
  • 如果你希望保留元素的原始順序,請參考下一節的方法。
侍エンジニア塾

3. 保留順序的情況下移除重複元素的方法

如果你希望在保留原始順序的情況下移除重複元素,可以使用以下的方法。

使用 dict.fromkeys() 的方法

範例

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(dict.fromkeys(original_list))
print(unique_list)  # 輸出範例: [1, 2, 3, 4, 5]

說明

  • dict.fromkeys() 會使用清單中的每個項目作為鍵(key)建立字典(dictionary)。
  • 因為字典的鍵是唯一的,所以可以達到移除重複的效果。
  • 從 Python 3.7 起,字典會保留插入的順序,因此也可以保留原清單的順序。

使用列表推導式(List Comprehension)的方法

範例

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = []
[unique_list.append(item) for item in original_list if item not in unique_list]

print(unique_list) # 輸出範例: [1, 2, 3, 4, 5]

說明

  • 使用列表推導式的方式,將未出現過的項目依序加入新的清單中。
  • 對於資料量較小的清單來說,這個方法非常實用。

注意事項

當資料量變大時,這種方式的處理速度可能會變慢。

4. 移除二維清單中的重複資料

在處理二維清單時,set()dict.fromkeys() 不能直接使用。本節將介紹如何移除二維清單中的重複項目。

使用列表推導式(List Comprehension)

範例

original_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = []
[unique_list.append(item) for item in original_list if item not in unique_list]
print(unique_list)  # 輸出範例: [1, 2, 3, 4, 5]

說明

  • 使用列表推導式的方式,可以有效過濾重複的子清單。
  • 即使清單中包含巢狀結構,也能透過相同邏輯進行處理。

注意事項

若資料量很大,這種方法可能會影響效能,因此建議根據情境選擇最適合的方式。

5. 使用 Pandas 移除重複資料

Pandas 是一個功能強大的資料處理函式庫,提供方便的方法來刪除資料框(DataFrame)中的重複項目。

使用 drop_duplicates() 方法

範例

import pandas as pd

data = {'A': [1, 2, 2, 3], 'B': [4, 5, 5, 6]}
df = pd.DataFrame(data)
df = df.drop_duplicates()
print(df)

說明

  • drop_duplicates() 可以根據整個資料框或指定欄位來移除重複資料。
  • 透過 subset 參數,可以指定某些欄位作為判斷重複的依據。

6. 偵測與統計重複元素

在 Python 中,除了移除重複項目之外,能夠找出重複元素並統計其出現次數也是很實用的功能。本節會介紹如何使用 collections.Counter 與其他基本方法達成這個目標。

使用 collections.Counter 的方法

範例

from collections import Counter

original_list = [1, 2, 2, 3, 4, 4, 5, 5, 5]
count = Counter(original_list)
print(count)  # 輸出範例: Counter({5: 3, 2: 2, 4: 2, 1: 1, 3: 1})

說明

  • Counter 會回傳一個字典格式,顯示每個元素與其對應的出現次數。
  • 透過這個方式,可以快速找出哪些元素重複出現。

找出重複項目的方法

範例

duplicates = [item for item, freq in count.items() if freq > 1]
print(duplicates)  # 輸出範例: [2, 4, 5]

說明

  • 使用 Counter 找出出現次數大於 1 的元素並放入新清單中。
  • 這樣就可以輕鬆取得所有重複項目的清單。

7. 總結

以下是本文所介紹的各種移除重複項目方法的整理:

各種方法的優點與適用情境

方法優點注意事項
使用 set()簡單且執行速度快無法保留原始順序
使用 dict.fromkeys()可以在保留順序的情況下移除重複僅在 Python 3.7 之後順序才有保證
列表推導式彈性高、可保留順序處理大量資料時效能可能變差
Pandas 的 drop_duplicates()適合處理資料框結構需要先安裝 Pandas 函式庫
使用 collections.Counter可以輕鬆取得出現次數大量資料時需注意效能表現

在 Python 中移除清單中的重複元素,根據資料的特性與處理需求,可以選擇最合適的方式。希望本篇教學能幫助你提升開發效率與資料處理能力!

侍エンジニア塾