迭代相同的列表两次,避免在python中重复

时间:2015-02-17 19:00:41

标签: 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等同样的事情。

我想删除这些副本,但不明白我应该怎么做。

1 个答案:

答案 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)]