簡體   English   中英

應用排序后從列表中提取重復項

[英]Extract Duplicates from List After Applying Sort

我正在編寫代碼片段以從列表中提取重復項。 我在這個網站上看到了幾個實現/解決方案。 但是,我沒有正確地獲得這一行 - 我認為語法明智。 排序后,將index(x)與index(x + 1)進行比較。 如果它被添加到集合中。

print(set([i for i in a if (a[i] == a[i+1]))

a = [1,2,3,2,1,5,6,5,5,5]
print(a)
print(set(sorted(a)))
# l1[i] == l1[i+1]
print(set([i for i in a if (a[i] == a[i+1]))
print(set([i for i in a if sum([1 for item in a if item == i]) > 1]))

預期成果:{1,2,5}

你可以使用collections.Counter

from collections import Counter

a = [1,2,3,2,1,5,6,5,5,5]
c = Counter(a)

res = [n for n, m in c.items() if m > 1]
print(res)  # [1, 2, 5]

這樣你就可以在列表上迭代一次,只在櫃台上迭代一次。

從我可以收集到的是你正在嘗試實現這個邏輯,這個代碼以O(nlogn)時間復雜度運行,而運行計數器的代碼以O(n)時間復雜度運行意味着它更快更干凈。

a = [1,2,3,2,1,5,6,5,5,5]
a.sort()
print(set([a[i] for i in range(len(a)-1) if (a[i] == a[i+1])]) )

OUTPUT

set([1, 2, 5])

相反怎么樣?

a = [1,2,3,2,1,5,6,5,5,5]
duplicates = set(element for element in a if a.count(element) > 1)
print(duplicates)

輸出:

{1, 2, 5}

建議一個簡單的解決方案,從列表中查找重復項。

>>> a = [1,2,3,2,1,5,6,5,5,5]
>>> a.sort()
>>> set([x for x in a if a.count(x) > 1])

輸出: {1, 2, 5}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM