Arrays 我能';我不理解Python中的递归或迭代动态循环

Arrays 我能';我不理解Python中的递归或迭代动态循环,arrays,list,loops,recursion,nested-loops,Arrays,List,Loops,Recursion,Nested Loops,昨天我试着告诉你们如何动态循环,你们要么用递归法,要么用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] = &qu

昨天我试着告诉你们如何动态循环,你们要么用递归法,要么用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等? 如果是的话,你能告诉我你一天的时间来解释你是怎么做的吗?使用示例代码?
谢谢…

如果我正确理解您的需求,您可以使用从每个列表生成变量组合,使用变量控制使用的
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')
['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']
或者,您可以使用递归,为对其进行操作的函数的每次调用创建一个值列表:

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)
输出:

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')
['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']

为什么要同时从
var[2]
中获取这两个值?输出不应该是
hello,I,coding;你好,我是蟒蛇;你好,像,编码;你好,像python;世界,我,编码;等等。
?是的,和你说的一模一样,先生。我可能忽略了一些方面。我实际的moto是编写一个bruteforce应用程序,其中我考虑到var[0]和var[1]的值将保持不变,并且var[3]将循环,因此我没有单独编写。所以是的,我完全想要你说的。那我怎么做呢?谢谢:)我不明白。为什么要静态地编写2和3?而且我也不熟悉iter的工具。请你解释一下好吗?感谢2和3只是为了演示代码;
字段
值将是您输入的用户类型。答案中的手册链接应该会为您提供所需的所有解释,否则只需在stackoverflow上搜索itertools.product,您就会找到更多的示例。谢谢。我会尽力让你知道的。但我也听说递归也是一种方法,我已经尝试了一整晚,但都做不到。所以,如果你能帮我解决这方面的问题,我就可以在睡觉时脑子里有两个解决方案:)Thanks@C0DEV3IL我在答案中添加了一个递归解决方案