Python嵌套循环唯一对
我试图编写一个嵌套循环,打印出某个范围内所有可能的“唯一对”数字。例如,如果范围为1到3,则唯一对为: (1,2) (1,3) (2,3) 如果范围为1到4,则唯一对为: (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) 以下是我在1到3个月内是如何做到这一点的:Python嵌套循环唯一对,python,nested-loops,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
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)。您可能正在寻找类似的东西:
n = 4
x = [(i,j) for i in range(1,n+1) for j in range(i+1, n+1)]
print x
干杯,
Alex您可能正在寻找这样的东西:
n = 4
x = [(i,j) for i in range(1,n+1) for j in range(i+1, n+1)]
print x
干杯,
范围(1,4)内的i的Alex:
对于范围(i+1,4)内的j:#对于范围(1,4)内的i:
对于范围(i+1,4)内的j:#使用:
只要您的输入是唯一的,就不会有重复的组合:
itertools.组合(iterable,r)
从输入iterable
返回元素的r
长度子序列
组合按字典排序顺序发出。因此,如果对输入iterable进行排序,则组合元组将按排序顺序生成
元素被视为唯一的是基于它们的位置,而不是它们的属性
价值因此,如果输入元素是唯一的,将不会重复
每个组合中的值
使用:
只要您的输入是唯一的,就不会有重复的组合:
itertools.组合(iterable,r)
从输入iterable
返回元素的r
长度子序列
组合按字典排序顺序发出。因此,如果对输入iterable进行排序,则组合元组将按排序顺序生成
元素被视为唯一的是基于它们的位置,而不是它们的属性
价值因此,如果输入元素是唯一的,将不会重复
每个组合中的值
您可以使用itertools。组合:
>>> from itertools import combinations
>>> print list(combinations(range(1,4), 2))
[(1, 2), (1, 3), (2, 3)]
您可以使用itertools。组合
:
>>> from itertools import combinations
>>> print list(combinations(range(1,4), 2))
[(1, 2), (1, 3), (2, 3)]
参见模块
也许你想要的是
list(itertools.combinations(range(1,4),2)) == [(1, 2), (1, 3), (2, 3)]
见模块
也许你想要的是
list(itertools.combinations(range(1,4),2)) == [(1, 2), (1, 3), (2, 3)]
为什么n+1
?难道n+1不就是5吗?也许我误解了什么?你需要n+1,因为范围(I,j)从I到j-1。所以如果我们使用(1,n),我们将有1到n-1。因此,如果n是4,那么我们将缺少4,我们将只有1、2和3。@AlexandruGodri我想他是在问为什么不将所有的n+1
替换为5,因为我写它是为了一般目的。您只需将“n”更改为任意值,代码即可工作:)为什么n+1
?难道n+1不就是5吗?也许我误解了什么?你需要n+1,因为范围(I,j)从I到j-1。所以如果我们使用(1,n),我们将有1到n-1。因此,如果n是4,那么我们将缺少4,我们将只有1、2和3。@AlexandruGodri我想他是在问为什么不将所有的n+1
替换为5,因为我写它是为了一般目的。您只需将“n”更改为任意值,代码即可工作:)