索引和切片。检查是否有任何项目发生过两次

时间:2013-10-27 22:21:45

标签: python python-2.7 python-3.x

让我们说你有一个清单

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

您将使用什么代码检查数字是否出现两次

3 个答案:

答案 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))

但这可能是也可能不是最有效的实施方式。