Python:在可变数量的输入上循环

Python:在可变数量的输入上循环,python,for-loop,itertools,Python,For Loop,Itertools,当iterables的数量根据用户输入的不同而变化时,有没有一种方法可以有效地将可变数量的输入输入到itertools.product()之类的程序中 例如,下面的代码运行,但需要为每个循环显式定义: steps = np.linspace(0,100,21) if len(elem_list) == 2: for phase in itertools.product(steps,steps): if round(round(phase[0],10)+round(pha

当iterables的数量根据用户输入的不同而变化时,有没有一种方法可以有效地将可变数量的输入输入到itertools.product()之类的程序中

例如,下面的代码运行,但需要为每个循环显式定义:

steps = np.linspace(0,100,21)

if len(elem_list) == 2:
    for phase in itertools.product(steps,steps):
        if round(round(phase[0],10)+round(phase[1],10),10)==100:
            print(phase)

if len(elem_list) == 3:
    for phase in itertools.product(steps,steps,steps):
        if round(round(phase[0],10)+round(phase[1],10)+round(phase[2],10),10)==100:
            print(phase)
            
if len(elem_list) == 4:
    for phase in itertools.product(steps,steps,steps,steps):
        if round(round(phase[0],10)+round(phase[1],10)+round(phase[2],10)+round(phase[3],10),10)==100:
            print(phase)
            
if len(elem_list) == 5:
    for phase in itertools.product(steps,steps,steps,steps,steps):
        if round(round(phase[0],10)+round(phase[1],10)+round(phase[2],10)+round(phase[3],10)+round(phase[4],10),10)==100:
            print(phase)
其中,元素列表包含用户输入的可变数量的元素

有没有办法写得更简洁,这样它就可以普遍应用于任何长度的元素列表?谢谢

为此接受一个
repeat
参数。与
sum
map
一起使用

我不知道你为什么需要
round
(或者
round(…,10)
),因为
步骤包含整数(所以求和它们一定会得到一个整数),但这就是方法

steps = np.linspace(0, 100, 21)

for phase in itertools.product(steps, repeat=len(elem_list)):
    if sum(map(round, phase)) == 100:
        print(phase)

正如@DeepSpace提到的,repeat=是处理所有迭代项相同时的最佳方法。这听起来像是你想要的

在更复杂的情况下,可以使用范围列表。这个列表可以任意生成

list_of_ranges = [range(5), (1, 3, 7), range(10), (True, False)]
itertools.product(*list_of_ranges)

谢谢,效果很好!我发现,如果没有舍入命令,我有时会得到与整数略有偏差的数字。