如何将以下内容转换为递归函数,以便以任意深度累积列表列表?
def do_list(n):
ls = []
for a in range(10):
for b in range(10):
for c in range(10):
ls.append([a, b, c])
return ls
例如
do_list(10, 4)
可以:for a in range(10):
for b in range(10):
for c in range(10):
for d in range(10):
ls.append([a, b, c, d])
do_list(10, 5)
可以:for a in range(10):
for b in range(10):
for c in range(10):
for d in range(10):
for e in range(10):
ls.append([a, b, c, d, e])
最佳答案
要回答如何将其转换为递归函数的实际问题,请尝试以下操作:
def do_list(n):
if n <= 0:
yield []
else:
for res in do_list(n-1):
for x in range(10):
yield [*res, x]
for x in do_list(5):
print(x)
基本上,如果
n
为零(或更少),则只会生成一个空列表,否则将生成n-1
的所有结果,并将每个数字追加到每个结果中。注意,这是一个使用yield
的生成器函数,但是您也可以将结果收集到一个列表中,然后返回该列表(对于n
的较大值,这可能不明智):def do_list(n):
if n <= 0:
return [[]]
else:
result = []
for res in do_list(n-1):
for x in range(10):
result.append(res + [x])
return result
但是,对于这个特定的函数,并且使用python,您可能更应该使用
itertools.product
:import itertools
for x in itertools.product(range(10), repeat=5):
print(x)