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)]或任何其他元素多次出现,如何报告错误
答案 0 :(得分:1)
使用set和loop;如果您之前看过一个元素,该集合将告诉您:
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)
答案 1 :(得分:1)
如果您只想检测它,不能确切地看到哪些元素出现过多次,您可以这样做:
if len(lt1) != len(set(lt1)):
# Not all unique
在第二个示例中,您需要在转换为集合之前将列表映射到元组:
if len(lt22) != len(set(map(tuple, lt22))):
# Not all unique
如果您想知道每个项目发生了多少次,请使用python 2.7中引入的collections.Counter
:
>>> from collections import Counter
>>> {k: d for k, d in Counter(lt1).items() if d > 1}
{(1, 1): 2}
同样,您必须先将lt22
映射到tuple
,然后才能使其正常工作。
如果你只需要一个列表项目不止一次出现,Martijns解决方案可能是该特定任务中效率最高的。