列表去重方法有很多,主要方法如下:
1. set去重
#方法1. set 去重 list01=[1,1,0,0,1,2,2,4,3,3,3] result_list=list(set(list01)) print(result_list)#[0, 1, 2, 3, 4]
優點:簡單高效,程式碼量少,效能好。
缺點:可能會改變原始資料的順序。
2. 列表推導式
#方法2.列表推導式 list02=[1,1,0,0,1,2,2,4,3,3,3] result_list2 = [] [result_list2.append(x) for x in list02 if x not in result_list2] print(result_list2)#[1, 0, 2, 4, 3]
優點:保留了原始順序
缺點:效率較低,尤其是列表很大的時候。時間複雜度是 O(n^2)
3. collections.Counter
#方法3.用 collections.Counter from collections import Counter list03=[1,1,0,0,1,2,2,4,3,3,3] # print("Counter(list03)",Counter(list03))#Counter({1: 3, 3: 3, 0: 2, 2: 2, 4: 1}) result_list3=list(Counter(list03).keys()) print(result_list3)#[1, 0, 2, 4, 3]
優點:保留原始順序,效率高,一行程式碼搞定。
缺點:需要引入 collections 模組,不過這個模組是標準庫的一部分,不用擔心額外安裝問題.
4. dict.fromkeys
#方法4:用 dict.fromkeys #Python 3.7+中,字典是有序的 list04=[1,1,0,0,1,2,2,4,3,3,3] result_list4=list(dict.fromkeys(list04)) print(result_list4)#[1, 0, 2, 4, 3]
優點:保留原始順序,效率高。
缺點:可能不太直觀,需要知道字典有序的特性。
5. pandas.unique(list).tolist()
#方法5:用pandas import pandas as pd list05=[1,1,0,0,1,2,2,4,3,3,3] result_list5=pd.unique(list05).tolist() print(result_list5)#[1, 0, 2, 4, 3]
優點:保留原始順序,程式碼簡潔。
缺點:需要引入 pandas 庫,適合已經在使用 pandas 的場景。
6. numpy.unique(list).tolist()
#方法6:用numpy import numpy as np list06=[1,1,0,0,1,2,2,4,3,3,3] result_list6=np.unique(list06).tolist() print(result_list6)#[0, 1, 2, 3, 4]
優點:程式碼簡潔,適合數值計算
缺點:需要引入 numpy 庫,適合已經在使用 numpy 的場景,可能會改變原始資料的順序
7. itertools.groupby
#方法7:itertools.groupby from itertools import groupby list07=[1,1,0,0,1,2,2,4,3,3,3] sorted_list = sorted(list07) result_list7 = [key for key, _ in groupby(sorted_list)] print(result_list7)#[0, 1, 2, 3, 4]
優點:適用於排序後的資料,效能較好。
缺點:排序的時間複雜度為 O(n log n),不適用於無序列表與大列表
8. pandas.Series(list).drop_duplicates().tolist()
#方法8:pandas.Series(list).drop_duplicates().tolist() import pandas as pd list08 = [1,1,0,0,1,2,2,4,3,3,3] result_list8 = pd.Series(list08).drop_duplicates().tolist() print(result_list8)#[1, 0, 2, 4, 3]
優點: 程式碼簡潔,易於理解和實現。適用於無序的資料列表,不需要排序。
缺點:需要匯入 pandas 庫,可能增加額外的依賴。對非常大的列表可能效能較差。
小結: 需要保留原始順序或不關心順序推薦使用collections.Counter,既不需要安裝新的模組,而且高效。