1

假设你有一个清单

List1(1,2,2,3,4)

你会用什么代码来检查一个数字是否出现了两次

4

3 回答 3

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

如果有重复,则集合的长度将小于列表的长度。如果没有,则两个长度将相等。

于 2013-10-27T22:26:49.693 回答
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只包含可散列项,这很好。如果有不可散列的项目,您可以将它们提取到单独的列表中,并且只是.count()@Christian's answer中的方法

如果有人真的需要快速执行此操作,则可以使用相同的逻辑来制作set构造函数的版本并编译为本地函数。

于 2013-10-27T22:37:14.397 回答
2

如果您只想测试是否有任何元素重复,但您不在乎它们是哪些,您可以简单地执行以下操作:

len(list) == len(set(list))

但这可能是也可能不是最有效的实现。

于 2013-10-27T22:26:05.860 回答