这个问题在这里已有答案:
所以我有这个问题:想象一下变量“N”是一个整数。我想要的是为这个数量的“空格”制作所有值的组合,这是一个让它更容易的例子:
N = 2
result = []
for i in range(0,100,25):
for j in range(0,100,25):
result.append((i,j))
print(result)
这会给
result = [(0, 0), (0, 25), (0, 50), (0, 75), (25, 0), (25, 25), (25, 50), (25, 75), (50, 0), (50, 25), (50, 50), (50, 75), (75, 0), (75, 25), (75, 50), (75, 75)]
目标是给出0到100之间的所有组合,步长为25步。
同样适用于3个变量...... [(0,0,0),(0,0,25),...,(25,50,50),...]
如果我想要N = 3,我必须使用3个循环。我想知道如何以不同的方式对其进行编程,以便我可以输入任何N并且它会给出正确的结果。
你想要的是几个列表的笛卡尔积,并且在模块product
中有函数itertools
,它就是这样:
from itertools import product
result = list(product(range(0,100,25),
range(0,100,25)))
#[(0, 0), (0, 25), (0, 50), (0, 75), (25, 0), (25, 25),
# (25, 50), (25, 75), (50, 0), (50, 25), (50, 50),
# (50, 75), (75, 0), (75, 25), (75, 50), (75, 75)]
您可以根据需要传递任意数量的范围,但它们不必相同。
如果您以后计划在循环中使用生成的元组,请不要将product
的结果强制转换为列表:
for tup in product(range(0,100,25), ...):
do_something_with(tup)
from itertools import product
N = 2
START = 0
END = 100
STEP = 25
rng = range(START, END, STEP)
for tup in product(rng, repeat = N):
print(tup)