我无法理解 Python 中的递归或迭代动态循环

I can't understand recursive or iterative dynamic loops in Python

昨天给大家讲了动态循环的方法,大家回答的不是recursion就是iter,老实说我还没看懂。所以我今天要说得更具体一些。

比如说,用户被问到字段数,他选择了3。

因此,对于数组或带键的字典,例如 var,将有一个循环,用 3 个条目填充它们。

我想要的是使嵌套循环在伪代码中表现得像

for i in var[0]:
   for j in var[1]:
      for k in var[2]:
         print(i, j, k)

这样,如果原始列表有

var[0] = "hello", "world"
var[1] = "I", "like"
var[2] = "coding", "Python"

然后打印会显示:

loop 1) hello, I, coding, python, 
loop 2) hello, like, coding, python,
loop 3) world, I, coding, python
loop 4) world, like, coding, python

问题是,使用静态循环很容易做到这一点,但整个代码取决于用户输入的值。在这种情况下,将有 4 个嵌套循环。

所以我在想,这可能吗,递归或 iter 等? 如果是,请给我一天中的时间来解释如何?有示例代码吗? 谢谢...

如果我理解你的需求正确,你可以使用itertools.product从每个列表中生成变量的组合,使用变量来控制使用的var元素的数量。例如:

import itertools

var = [["hello", "world"],
       ["I", "like"],
       ["coding", "Python"]
       ]
        
for fields in 2, 3:
    print(f"fields = {fields}\n")
    for values in itertools.product(*var[:fields]):
        print(values)
    print()

输出:

fields = 2

('hello', 'I')
('hello', 'like')
('world', 'I')
('world', 'like')

fields = 3

('hello', 'I', 'coding')
('hello', 'I', 'Python')
('hello', 'like', 'coding')
('hello', 'like', 'Python')
('world', 'I', 'coding')
('world', 'I', 'Python')
('world', 'like', 'coding')
('world', 'like', 'Python')

或者,您可以使用递归,为对操作它们的函数的每次调用构建一个值列表:

def doit(values):
    print(values)
    
def loop(fields, args, values=[]):
    if fields == 0:
        doit(values)
    else:
        for v in args[0]:
            loop(fields-1, args[1:], values + [v])
            
var = [["hello", "world"],
       ["I", "like"],
       ["coding", "Python"]
       ]

loop(2, var)
loop(3, var)

输出:

['hello', 'I']
['hello', 'like']
['world', 'I']
['world', 'like']

['hello', 'I', 'coding']
['hello', 'I', 'Python']
['hello', 'like', 'coding']
['hello', 'like', 'Python']
['world', 'I', 'coding']
['world', 'I', 'Python']
['world', 'like', 'coding']
['world', 'like', 'Python']