如何将以下内容转换为递归函数,以便以任意深度累积列表列表?

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)

07-24 18:54