Python 如何检查列表列表中的两个元组是否不相同
如果上面列表中的(1,1)或其他元组多次出现,我如何报告错误 清单也是如此Python 如何检查列表列表中的两个元组是否不相同,python,Python,如果上面列表中的(1,1)或其他元组多次出现,我如何报告错误 清单也是如此 lt1 = [(1, 1), (1, 1), (1, 5), (1, 4), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2)] 如果['a',(1,2)]或任何其他元素出现不止一次,如何报告错误使用集合和循环;该集合将让您知道您以前是否见过某个元素: lt22 = [['a', (1,1)], ['a', (1,2)], ['a', (1,2)], ['a', (1,3)], ['b',
lt1 = [(1, 1), (1, 1), (1, 5), (1, 4), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2)]
如果['a',(1,2)]或任何其他元素出现不止一次,如何报告错误使用集合和循环;该集合将让您知道您以前是否见过某个元素:
lt22 = [['a', (1,1)], ['a', (1,2)], ['a', (1,2)], ['a', (1,3)], ['b', (2,1)], ['b', (2,2)], ['b', (2,2)]]
请注意,对于第二个列表中的可变元素,您希望首先将其转换为元组等不可变变量:
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)
在第二个示例中,在转换为集合之前,需要将列表映射到元组:
if len(lt1) != len(set(lt1)):
# Not all unique
如果您想知道每个项目发生了多少次,请使用python 2.7中引入的collections.Counter
:
if len(lt22) != len(set(map(tuple, lt22))):
# Not all unique
同样,在使用它之前,必须将lt22
映射到tuple
如果您只需要列出哪些项目多次出现,Martijns解决方案可能是该特定任务中最有效的解决方案。出于某种原因,我现在看到了来自芝麻街的Bob唱着“其中一项与其他项不同…”的图像
>>> from collections import Counter
>>> {k: d for k, d in Counter(lt1).items() if d > 1}
{(1, 1): 2}