Python嵌套循环唯一对

时间:2015-03-28 23:54:29

标签: python nested-loops

我试图编写一个嵌套循环,打印出所有可能的"唯一对"一定范围内的数字。例如,如果范围是1到3,则唯一对将是:

(1,2) (1,3) (2,3)

如果范围是1到4,则唯一对将是:

(1,2) (1,3) (1,4) (2,3) (2,4) (3,4)

这是我为1到3做的方式:

for i in range(1,4):
    for j in range(2,4):
        if (i != j & j != (i-1)):
            print (i,j)

打印出(1,2),(1,3),(2,3)。但这是一个黑客攻击,因为当我将范围更改为1.5时它不起作用。它打印出重复的对,如(1,5)和(5,1)。

5 个答案:

答案 0 :(得分:8)

for i in range(1,4):
    for j in range(i+1,4):  # <-- the key is to make j start at i+1
        print (i,j)

答案 1 :(得分:7)

使用itertools.combinations()

>>> import itertools
>>> print list(itertools.combinations(range(1, 5), r=2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

只要您的输入是唯一的,就不会有重复的组合:

  

itertools.combinations(iterable, r)

     

从输入r返回元素的iterable长度子序列。

     

组合以字典排序顺序发出。因此,如果输入iterable已排序,则组合元组将按排序顺序生成。

     

根据元素的位置而不是元素,将元素视为唯一元素   值。因此,如果输入元素是唯一的,将不会重复   每个组合中的值

答案 2 :(得分:5)

你可能正在寻找这样的东西:

n = 4
x = [(i,j) for i in range(1,n+1) for j in range(i+1, n+1)]
print x

干杯, 亚历

答案 3 :(得分:5)

您可以使用itertools.combinations

>>> from itertools import combinations
>>> print list(combinations(range(1,4), 2))
[(1, 2), (1, 3), (2, 3)]

Python 2 Documentation

Python 3 Documentation

答案 4 :(得分:4)

请参阅itertools模块。

也许你想要的是

list(itertools.combinations(range(1,4),2)) == [(1, 2), (1, 3), (2, 3)]