如何检查列表中的两个元组是否不相同

2024-09-30 14:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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)]或任何其他元素出现多次,如何报告错误


Tags: 元素列表报告错误元组lt1lt22
2条回答

如果您只想检测它,而不想看到哪些元素多次出现,您可以执行以下操作:

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

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

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

如果您想知道每个项发生了多少次,请使用collections.Counter,它是在python2.7中引入的:

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

同样,在使用它之前必须将lt22映射到tuple。你知道吗

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

使用一个集合和一个循环;集合将告诉您以前是否见过元素:

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)

相关问题 更多 >