我正在编写代码片段,以便从列表中提取重复项。我在这个网站上看到了几个实现/解决方案。然而,我没有正确地理解这一行--我想是语法上的。排序后,将索引(X)与索引(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}
发布于 2019-04-17 13:04:48
您可以使用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]通过这种方式,您可以遍历列表一次,并且仅遍历计数器一次。
发布于 2019-04-17 13:20:07
从我收集到的信息来看,你正在尝试实现这个逻辑,这个代码以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])]) )输出
set([1, 2, 5])发布于 2019-04-17 13:03:38
不如这样吧?
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}https://stackoverflow.com/questions/55720233
复制相似问题