让我们说你有一个清单
List1(1,2,2,3,4)
您将使用什么代码检查数字是否出现两次
答案 0 :(得分:5)
您可以使用collections.Counter
对象获取所有重复元素的列表:
>>> from collections import Counter
>>>
>>> l = [1,2,2,3,4]
>>>
>>> [k for k,v in Counter(l).iteritems() if v > 1]
[2]
如果只是想要检查是否存在重复,但不关心实际上是什么重复,那么将列表的长度与包含在其中的元素集的长度进行比较列表:
>>> len(l) != len(set(l))
True
如果存在重复项,则集合的长度将小于列表的长度。如果没有,则两个长度相等。
答案 1 :(得分:5)
Counter(List1)
和set(List1)
的问题在于它们不能短路。因此,如果List1有一百万个项目,您需要在得到答案之前处理整个列表
假设我们有
List1 = [1, 2, 2, 3, 4]
def has_duplicate(List1)
s = set()
for item in List1:
if item in s:
return True
s.add(item)
return False
现在只需查看3个项目就可以返回该功能
如果List1
仅包含可售项目,则可以。如果有不可清洗的项目,您可以将它们提取到一个单独的列表中,而只是@ Christian的答案中的.count()
方法
如果某人确实需要快速执行此操作,则可以使用相同的逻辑来创建set
构造函数的版本并编译为本机函数。
答案 2 :(得分:2)
如果你只是想测试是否有任何元素被重复,但你不关心它们是哪一个,你可以简单地做:
len(list) == len(set(list))
但这可能是也可能不是最有效的实施方式。