假设你有一个清单
List1(1,2,2,3,4)
你会用什么代码来检查一个数字是否出现了两次
您可以使用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
如果有重复,则集合的长度将小于列表的长度。如果没有,则两个长度将相等。
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
只包含可散列项,这很好。如果有不可散列的项目,您可以将它们提取到单独的列表中,并且只是.count()
@Christian's answer中的方法
如果有人真的需要快速执行此操作,则可以使用相同的逻辑来制作set
构造函数的版本并编译为本地函数。
如果您只想测试是否有任何元素重复,但您不在乎它们是哪些,您可以简单地执行以下操作:
len(list) == len(set(list))
但这可能是也可能不是最有效的实现。