場景是這樣的:
使用以下方法加入多個串列后:
list1 = ["A","B"]
list2 = ["A","B","C"]
list3 = ["C","D","E"]
mainlist = list1 list2 list3
mainlist.sort()
主串列現在看起來像這樣:
mainlist = ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'E']
我想洗掉任何不是重復值的東西。如果有問題的值已經存在于串列中,則不得觸摸它,而如果它僅在主串列中出現一次,我想將其洗掉。
我嘗試使用這種方法,但似乎有些東西不起作用:
for i in mainlist:
if mainlist.count(i) <= 1:
mainlist.remove(i)
else:
continue
但我回傳的是一個如下所示的串列:
mainlist = ['A', 'A', 'B', 'B', 'C', 'C', 'E'] #value "D" is not anymore present. Why?
我想回傳的是這樣的串列:
mainlist = ['A', 'A', 'B', 'B', 'C', 'C'] #All values NOT duplicates have been deleted
我可以使用以下代碼洗掉重復項:
for i in mainlist:
if mainlist.count(i) > 1:
mainlist.remove(i)
else:
continue
然后作為最終結果:
mainlist = ['A','B','C']
但真正的問題是:如何洗掉串列中的非重復項?
uj5u.com熱心網友回復:
您可以使用collections.Counter()來跟蹤每個專案的頻率:
from collections import Counter
counts = Counter(mainlist)
[item for item in mainlist if counts[item] > 1]
這輸出:
['A', 'A', 'B', 'B', 'C', 'C']
uj5u.com熱心網友回復:
用于collections.Counter計算串列元素。使用串列推導僅保留多次出現的元素。請注意,串列不必排序。
from collections import Counter
list1 = ["A","B"]
list2 = ["A","B","C"]
list3 = ["C","D","E"]
mainlist = list1 list2 list3
cnt = Counter(mainlist)
print(cnt)
# Counter({'A': 2, 'B': 2, 'C': 2, 'D': 1, 'E': 1})
dups = [x for x in mainlist if cnt[x] > 1]
print(dups)
# ['A', 'B', 'A', 'B', 'C', 'C']
uj5u.com熱心網友回復:
您可以找到這樣的重復項:
duplicates = [item for item in mainlist if mainlist.count(item) > 1]
uj5u.com熱心網友回復:
您的問題在于您在對其進行迭代時進行操作。洗掉"D"回圈后停止,因為串列中沒有更多元素作為"E"索引 6。
創建串列的副本并僅對該串列進行操作:
new_list = list(mainlist)
for i in mainlist:
if mainlist.count(i) <= 1:
new_list.remove(i)
else:
continue
uj5u.com熱心網友回復:
如果您只想輸出串列中重復元素的串列,您可以使用集合和推導來僅保留重復項。
list1 = ["A","B"]
list2 = ["A","B","C"]
list3 = ["C","D","E"]
fulllist = list1 list2 list3
fullset = set(list1) | set(list2) | set(list3)
dups = [x for x in fullset if fulllist.count(x) > 1]
print(dups) # ['A', 'C', 'B']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/477168.html
下一篇:在python中將矩陣轉換為梯形
