python - 应用排序后,python 从列表中提取重复项

  显示原文与译文双语对照的内容

我正在编写代码片段以从列表中提取重复项。 排序后,将 index(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 }

时间:

你可以使用 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]



这样你就可以遍历列表一次,只在计数器上一次。

这个怎么样?


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}



 

我可以从 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])



 

建议从列表中查找重复项的简单解决方案。


>>> 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}

...