2

有没有办法查找列表是否包含重复项。例如:

list1 = [1,2,3,4,5]
list2 = [1,1,2,3,4,5]

list1.*method* = False # no duplicates
list2.*method* = True # contains duplicates
4

4 回答 4

14

如果您暂时将列表转换为集合,则将消除集合中的重复项。然后,您可以比较列表和设置的长度。

在代码中,它看起来像这样:

list1 = [...]
tmpSet = set(list1)
haveDuplicates = len(list1) != len(tmpSet)
于 2012-06-28T17:27:33.917 回答
2

将列表转换为集合以删除重复项。比较原始列表和集合的长度以查看是否存在任何重复项。

>>> list1 = [1,2,3,4,5]
>>> list2 = [1,1,2,3,4,5]
>>> len(list1) == len(set(list1))
True # no duplicates
>>> len(list2) == len(set(list2))
False # duplicates
于 2012-06-28T17:27:54.470 回答
2

检查原始列表的长度是否大于列表中唯一“集合”元素的长度。如果是这样,肯定有重复

list1 = [1,2,3,4,5]
list2 = [1,1,2,3,4,5]

if len(list1) != len(set(list1)):
    #duplicates
于 2012-06-28T17:28:08.797 回答
0

set()方法仅适用于可散列对象,因此为了完整性,您可以通过简单的迭代来完成:

import itertools

def has_duplicates(iterable):
    """
    >>> has_duplicates([1,2,3])
    False
    >>> has_duplicates([1, 2, 1])
    True
    >>> has_duplicates([[1,1], [3,2], [4,3]])
    False
    >>> has_duplicates([[1,1], [3,2], [4,3], [4,3]])
    True
    """
    return any(x == y for x, y in itertools.combinations(iterable, 2))
于 2012-06-28T17:43:57.823 回答