我有一个列表[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)]


由于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)]

10-04 11:38