列表去重是工作中經(jīng)常會遇到的問題逞力,如何能快速事半功倍的完成工作, 一些必備的技能不可少勤讽,這里總結(jié)幾種列表去重的方法:
1.for循環(huán)遍歷去重——不改變原來的順序铲敛,最基本最原始的去重方法
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] 列表推導(dǎo)式寫法
output:
[3, 5, 1, 2, 6, 8, 7, 4, 9]
2.用字典dict去重,把列表轉(zhuǎn)換成字典籽孙,順序不變烈评,利用字典的唯一性去重
語法:dict.fromkeys(seq[, value])
說明:字典的fromkeys()方法用于創(chuàng)建一個新字典,以序列seq中元素做字典的鍵犯建,value為字典所有鍵對應(yīng)的初始值讲冠,默認(rèn)為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轉(zhuǎn)化為set再轉(zhuǎn)化為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()方法統(tǒng)計并刪除揭芍,需先排序胳搞,會改變順序
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]
衍生:刪除列表中的重復(fù)項,有重復(fù)的項都刪除称杨,只保留單個項
示例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編程錦囊》明日科技