列表list去重的几种方法

列表去重是工作中经常会遇到的问题,如何能快速事半功倍的完成工作, 一些必备的技能不可少,这里总结几种列表去重的方法:
1.for循环遍历去重——不改变原来的顺序,最基本最原始的去重方法

list1 = [3,5,1,2,6,8,7,7,6,5,4,9,3,2]
new_list = []
for i in list1:
    if i not in new_list:
        new_list.append(i)
print(new_list)
#[new_list.append(i) for i in list1 if i not in new_list]  列表推导式写法

output:
[3, 5, 1, 2, 6, 8, 7, 4, 9]

2.用字典dict去重,把列表转换成字典,顺序不变,利用字典的唯一性去重
语法:dict.fromkeys(seq[, value])
说明:字典的fromkeys()方法用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值,默认为None。

list2 = [3, 3, 4, 6, 1, 2, 4, 5]
new_list = list(dict.fromkeys(list2))
print(new_list) 

output:
[3, 4, 6, 1, 2, 5]

3.set去重,再sort排序,直接set不保证顺序
将list转化为set再转化为list,利用set的自动去重功能,但不保证顺序,再加上列表中索引(index)的方法保证去重后的顺序不变。

list3 = [3,5,1,2,6,8,7,7,6,5,4,9,3,2]
new_list = list(set(list3))   #不保证顺序
print(new_list) 

new_list.sort(key=list3.index)  #保留顺序
#new_list = sorted(set(list3), key=list3.index)
print(new_list)    

output:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[3, 5, 1, 2, 6, 8, 7, 4, 9]

4.count()方法统计并删除,需先排序,会改变顺序

list4 = [3,5,1,2,6,8,7,7,6,5,4,9,3,2]
list4.sort()
for i in list4:
    while list4.count(i)>1:
        del list4[list4.index(i)]
print(list4)

output:
[1, 2, 3, 4, 5, 6, 7, 8, 9]

衍生:删除列表中的重复项,有重复的项都删除,只保留单个项
示例1

list5 = [3,5,1,2,6,8,7,7,6,5,4,9,3,2]
new_list = [i for i in list5 if list5.count(i) == 1]
print(new_list)

output:
[1, 8, 4, 9]

示例2

list5 = [3,5,1,2,6,8,7,7,6,5,4,9,3,2]
new_list = list(filter(lambda x:list5.count(x) ==1, list5))
print(new_list)

output:
[1, 8, 4, 9]

参考资料:
1.https://zhuanlan.zhihu.com/p/94080336
2.https://blog.csdn.net/weixin_46284353/article/details/107621674
3.https://www.cnblogs.com/jinfanfu/p/10899469.html
4.《python编程锦囊》明日科技

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容