[英]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.