在python中对同一列表迭代两次并避免重复
我有一个列表在python中对同一列表迭代两次并避免重复,python,list,duplicates,Python,List,Duplicates,我有一个列表[1,2,3,4,5],我用for循环迭代了两次 for i in list: for j in list: print(i,j) 我不关心I和j的顺序,因此我收到了很多副本。例如,1,2和2,1对我来说是“相同的”。1,4和4,1和3,5和5,3也是一样的,依此类推 我想删除这些重复项,但我真的不明白该怎么做。实际上,您想要的是以下组合: >>> list(combinations( [1,2,3,4,5],2)) [(1, 2), (1
[1,2,3,4,5]
,我用for循环迭代了两次
for i in list:
for j in list:
print(i,j)
我不关心I和j的顺序,因此我收到了很多副本。例如,1,2和2,1对我来说是“相同的”。1,4和4,1和3,5和5,3也是一样的,依此类推
我想删除这些重复项,但我真的不明白该怎么做。实际上,您想要的是以下组合:
>>> list(combinations( [1,2,3,4,5],2))
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
作为生成器的结果,如果要在其上循环,则不需要列表:
for i,j in combinations( [1,2,3,4,5],2):
#do stuff
另外,如注释中所述,如果您希望使用(n,n)这样的元组,则可以使用:
也许你还想使用itertools.compositions\u和\u replacement([1,2,3,4,5],2)
,如果你想包含(n,n)
这样的元组。我刚才在玩itertools,发现itertools.compositions()。所以也许你也应该用一套来包装;-)@Finn Yes如果主列表包含DUP,则结果将包含重复的结果!但在这种情况下,由于主列表不包含DUP,因此无需使用设置!
>>> list(combinations_with_replacement([1, 2, 3, 4, 5],2))
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 2), (2, 3), (2, 4), (2, 5), (3, 3), (3, 4), (3, 5), (4, 4), (4, 5), (5, 5)]