我有一个列表[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等同样的事情。
我想删除这些副本,但不明白我应该怎么做。
答案 0 :(得分:7)
其实你想要这些组合:
>>> 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)]
由于itertools.combinations
是一个生成器,如果你想循环它,你不需要list
:
for i,j in combinations( [1,2,3,4,5],2):
#do stuff
同样如评论中所述,如果你想要像(n,n)这样的元组,你可以使用itertools.combinations_with_replacement
:
>>> 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)]