列表去重
列表去重方法有很多,主要方法如下:
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,既不需要安装新的模块,而且高效。