遍历N for循环,其中N是变量[duplicate]

问题描述 投票:0回答:2

这个问题在这里已有答案:

所以我有这个问题:想象一下变量“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并且它会给出正确的结果。

python algorithm python-3.6 permutation
2个回答
1
投票

你想要的是几个列表的笛卡尔积,并且在模块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)

2
投票
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)
© www.soinside.com 2019 - 2024. All rights reserved.