0
lt1 = [(1, 1), (1, 1), (1, 5), (1, 4), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2)]

如果上面列表中的 (1,1) 或其他一些元组多次出现,我该如何报告错误

同样对于列表

lt22 = [['a', (1,1)], ['a', (1,2)], ['a', (1,2)], ['a', (1,3)], ['b', (2,1)], ['b', (2,2)], ['b', (2,2)]]

如果 ['a', (1,2)] 或任何其他元素多次出现如何报告错误

4

2 回答 2

1

使用集合和循环;如果您以前看过一个元素,该集合会让您知道:

seen = set()
for el in lt1:
    if el in seen:
        raise ValueError, 'More than one %r in your list' % (el,)
    seen.add(el)

请注意,对于第二个列表中的可变元素,您希望首先将它们转换为非可变变体,例如元组:

seen = set()
for el in lt22:
    el = tuple(el)
    if el in seen:
        raise ValueError, 'More than one %r in your list' % (el,)
    seen.add(el)
于 2012-08-01T10:31:10.967 回答
1

如果您只是想检测它,而不是确切地看到哪些元素多次出现,您可以这样做:

if len(lt1) != len(set(lt1)):
    # Not all unique

在第二个示例中,您需要在转换为集合之前将列表映射到元组:

if len(lt22) != len(set(map(tuple, lt22))):
    # Not all unique

如果您想知道每个项目发生了多少次,请使用collections.Counterpython 2.7 中引入的 :

>>> from collections import Counter
>>> {k: d for k, d in Counter(lt1).items() if d > 1}
{(1, 1): 2}

同样,您必须在使用它之前映射lt22到它才能工作。tuple

如果您只需要一个多次出现的项目列表,Martijns 解决方案可能是该特定任务最有效的解决方案

于 2012-08-01T10:34:17.493 回答