引言
列表作为一个容器可以存储不同类型的数据元素,而且可以存储重复元素。在项目应用中,提取列表中唯一元素删除重复项是常见操作,实现方法也多种多样。列举几种常用方法方便遗忘时回忆。
目录
一、set()去重复
使用集合set数据结构可以去重复,但会造成数据无序性,改变原始列表的有序性。
示例代码
import time
def remove_duplicate_1(data_list):
start_time = time.time()
#利用集合set去重复
new_list = list(set(data_list))
end_time = time.time()
print("使用set()集合去重复时间{:.3f}".format(end_time-start_time))
return new_list
duplicate_cnt = int(1e8) #重复次数
data = list(range(6))*duplicate_cnt
new_list = remove_duplicate_1(data)
print(new_list)
#实验结果
使用set()集合去重复时间4.511
[0, 1, 2, 3, 4, 5]
二、列表推导式去重复
如果像保持列表去重复后数据的有效顺序可以使用列表推导式与if语句的组合。
示例代码
import time
def remove_duplicate_2(data_list):
start_time = time.time()
new_list = []
#利用列表推导式去重复
[new_list.append(i) for i in data_list if i not in new_list]
end_time = time.time()
print("使用列表推导式去重复时间{:.3f}".format(end_time-start_time))
return new_list
duplicate_cnt = int(1e8) #重复次数
data = list(range(6))*duplicate_cnt
new_list = remove_duplicate_2(data)
print(new_list)
#实验结果
使用列表推导式去重复时间16.925
[0, 1, 2, 3, 4, 5]
三、numpy.unque()去重复
列表中的数据类型越统一 ,处理速度越快。
import time
import numpy as np
def remove_duplicate_3(data_list):
start_time = time.time()
#利用unique函数
new_list = np.unique(data_list).tolist()
end_time = time.time()
print("使用np.unique函数去重复时间{:.3f}".format(end_time-start_time))
return new_list
duplicate_cnt = int(1e6) #重复次数
print('整数列表去重复操作')
data = list(range(6))*duplicate_cnt
new_list = remove_duplicate_3(data)
print(new_list)
print('浮点数列表去重复操作')
data = [float(i) for i in range(6)]*duplicate_cnt
new_list = remove_duplicate_3(data)
print(new_list)
print('混合数据列表去重复操作')
data = [0,1,2,3.0,4,5.0]*duplicate_cnt
new_list = remove_duplicate_3(data)
print(new_list)
#结果
整数列表去重复操作
使用np.unique函数去重复时间0.314
[0, 1, 2, 3, 4, 5]
浮点数列表去重复操作
使用np.unique函数去重复时间0.341
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
混合数据列表去重复操作
使用np.unique函数去重复时间0.439
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
四、字典的键去重复
利用字典键的唯一性去除列表中的重复数据
def remove_duplicate_4(data_list):
start_time = time.time()
#利用字典的键唯一性去重复
new_list = list(dict.fromkeys(data_list))
end_time = time.time()
print("使用字典的键唯一性去重复时间{:.3f}".format(end_time-start_time))
return new_list
duplicate_cnt = int(1e8) #重复次数
# print('整数列表去重复操作')
data = list(range(6))*duplicate_cnt
new_list = remove_duplicate_4(data)
print(new_list)
#结果
使用字典的键唯一性去重复时间8.434
[0, 1, 2, 3, 4, 5]
五、列表常用方法系列文章链接
关于列表的内置函数使用技巧相继推出了五篇文章,为方便大家知晓每篇文章的主讲内容。本部分列出主讲方法和相关链接。
主讲方法 | 文章链接 |
1.append()、extend()和insert()的详解 | https://blog.csdn.net/li1784506/article/details/130664126?spm=1001.2014.3001.5502 |
2.remove()、del、pop()、clear()的详解 | https://blog.csdn.net/li1784506/article/details/139159598?spm=1001.2014.3001.5502 |
3.sort()和sorted(),reverse()和reversed()的区别 | https://blog.csdn.net/li1784506/article/details/139185664?spm=1001.2014.3001.5502 |
4.count()、index()函数 | https://blog.csdn.net/li1784506/article/details/139204177?spm=1001.2014.3001.5502 |
5.列表元素如何去掉重复项 | https://blog.csdn.net/li1784506/article/details/139215227?spm=1001.2014.3001.5502 |