考虑以下示例:
import itertools
import numpy as np
a = np.arange(0,5)
b = np.arange(0,3)
c = np.arange(0,7)
prods = itertools.product(a,b,c)
for p in prods:
print(p)
Run Code Online (Sandbox Code Playgroud)
这将按以下顺序迭代产品:
(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 0, 4)
(0, 1, 0)
Run Code Online (Sandbox Code Playgroud)
但我更愿意按总和的顺序给出产品,例如
(0, 0, 0)
(0, 0, 1)
(0, 1, 0)
(1, 0, 0)
(0, 1, 1)
(1, 0, 1)
(1, 1, 0)
(0, 0, 2)
Run Code Online (Sandbox Code Playgroud)
如何在不将所有组合存储在内存中的情况下实现这一目标?
注意: a b和c始终是范围,但不一定具有相同的最大值。当两个乘积之和相等时,也没有二级排序,即(0,1,1)等于(2,0,0)。
鉴于两个整数n和d,我想构建长度的所有非负元组的列表d是总结到n,包括所有排列.这类似于整数分区问题,但解决方案要简单得多.例如
d==3:
[
[n-i-j, j, i]
for i in range(n+1)
for j in range(n-i+1)
]
Run Code Online (Sandbox Code Playgroud)
这可以很容易地扩展到更多尺寸,例如d==5:
[
[n-i-j-k-l, l, k, j, i]
for i in range(n+1)
for j in range(n-i+1)
for k in range(n-i-j+1)
for l in range(n-i-j-l+1)
]
Run Code Online (Sandbox Code Playgroud)
我现在想制作d,即嵌套循环的数量,一个变量,但我不知道如何嵌套循环.
任何提示?
下面我将给出两个具有不同维度值的示例。
锁-1
# numbers are the shown values on the so in this case: 0,1,2
numbers = 5
# fields are those things i can turn to change my combination
fields = 4
Run Code Online (Sandbox Code Playgroud)
所以我对我所有的可能性的期望是
0 0 0 5
0 0 1 4
0 0 2 3
0 0 3 2
0 0 4 1
0 0 5 0
0 1 0 4
0 1 1 3
0 1 2 2
0 1 3 1
0 1 4 0
0 2 …Run Code Online (Sandbox Code Playgroud)