Arrays 我能';我不理解Python中的递归或迭代动态循环
昨天我试着告诉你们如何动态循环,你们要么用递归法,要么用iter法,但我真的还不明白。所以我今天要说得更具体一些 比如,用户被要求输入字段的数量,他选择了3 因此,对于一个数组或一个带有键的字典,比如说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
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我在答案中添加了一个递归解决方案