我试图编写一个嵌套循环,打印出所有可能的"唯一对"一定范围内的数字。例如,如果范围是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)。
答案 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)
>>> 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)]
答案 4 :(得分:4)