如何使用itertools.product做依赖嵌套循环?
How to do dependent nested loop using itertools.product?
for i in range(n):
for j in range(i + 1, n):
如何使用 itertools.product 执行此操作?它需要可变数量的可迭代对象,但似乎没有办法从另一个可迭代对象中引用一个可迭代对象。
例如,n=5
:
for x in itertools.product(range(5), range(1, 5))
生成
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(1, 1)
...
注意 (1, 1)
不应该存在。
对于给定的 n
n = 5
for i in range(n):
for j in range(i + 1, n):
print((i, j))
打印:
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
这不是笛卡尔积,itertools.product 是笛卡尔积。它是一个组合,可以用 itertools.combinations
:
from itertools import combinations, product
tups = list(combinations(range(5), r=2))
tups
将是:
[(0, 1),
(0, 2),
(0, 3),
(0, 4),
(1, 2),
(1, 3),
(1, 4),
(2, 3),
(2, 4),
(3, 4)]
你可以itertools.combinations(range(5),2)
。 range(5)
告诉它元素的范围从 0 到 4,而 2
告诉它每个元组有 2 个元素。如果你想访问每个元组中的元素,你可以做索引:
for x in itertools.combinations(range(5),2):
i = x[0]
j = x[1]
或者您可以在 for 循环中列出变量名称:
for i, j in itertools.combinations(range(5),2):
for i in range(n):
for j in range(i + 1, n):
如何使用 itertools.product 执行此操作?它需要可变数量的可迭代对象,但似乎没有办法从另一个可迭代对象中引用一个可迭代对象。
例如,n=5
:
for x in itertools.product(range(5), range(1, 5))
生成
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(1, 1)
...
注意 (1, 1)
不应该存在。
对于给定的 n
n = 5
for i in range(n):
for j in range(i + 1, n):
print((i, j))
打印:
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
这不是笛卡尔积,itertools.product 是笛卡尔积。它是一个组合,可以用 itertools.combinations
:
from itertools import combinations, product
tups = list(combinations(range(5), r=2))
tups
将是:
[(0, 1),
(0, 2),
(0, 3),
(0, 4),
(1, 2),
(1, 3),
(1, 4),
(2, 3),
(2, 4),
(3, 4)]
你可以itertools.combinations(range(5),2)
。 range(5)
告诉它元素的范围从 0 到 4,而 2
告诉它每个元组有 2 个元素。如果你想访问每个元组中的元素,你可以做索引:
for x in itertools.combinations(range(5),2):
i = x[0]
j = x[1]
或者您可以在 for 循环中列出变量名称:
for i, j in itertools.combinations(range(5),2):