Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 任意深度嵌套循环_Python_Python 3.x_Algorithm_Recursion - Fatal编程技术网

Python 任意深度嵌套循环

Python 任意深度嵌套循环,python,python-3.x,algorithm,recursion,Python,Python 3.x,Algorithm,Recursion,如何将以下内容转换为可以以任意深度方式累积列表列表的递归函数 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\u list(10,4)可以: for a in range(10): for b in

如何将以下内容转换为可以以任意深度方式累积列表列表的递归函数

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\u 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])
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])
do\u list(10,5)
可以:

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])
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])
只需使用:

给你钱

@tobias_k的想法可能更好,使用函数的重复功能而不是生成器:

def do_list(n, d):
    return list(itertools.product(range(n), repeat=d))
只需使用:

给你钱

@tobias_k的想法可能更好,使用函数的重复功能而不是生成器:

def do_list(n, d):
    return list(itertools.product(range(n), repeat=d))

要回答如何将其转换为递归函数的实际问题,请尝试以下方法:

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)
但是,对于这个特定的函数,并且使用Python,您可能更应该使用
itertools.product

import itertools
for x in itertools.product(range(10), repeat=5):
    print(x)

要回答如何将其转换为递归函数的实际问题,请尝试以下方法:

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)
但是,对于这个特定的函数,并且使用Python,您可能更应该使用
itertools.product

import itertools
for x in itertools.product(range(10), repeat=5):
    print(x)

查看
itertools.product
,特别是
product(范围(10),重复=任何内容)
My bad。我使用python是因为我需要伪代码来用其他语言实现这个函数,所以我的问题实际上是“如何编写这样的函数”,而不是“如何使用python专门提供的工具来解决这个问题”。@pistacchio
itertools.product
的文档提供了一种实现这个函数的可能方法:。看一看,也许你可以把它改成其他语言。看看
itertools.product
,特别是
product(范围(10),重复=任意)
My bad。我使用python是因为我需要伪代码来用其他语言实现这个函数,所以我的问题实际上是“如何编写这样的函数”,而不是“如何使用python专门提供的工具来解决这个问题”。@pistacchio
itertools.product
的文档提供了一种实现这个函数的可能方法:。看看,也许你可以把它改成其他语言。我的错。我使用python是因为我需要伪代码来用其他语言实现这个函数,所以我的问题实际上是“如何编写这样的函数”,而不是“如何使用python专门提供的工具来解决这个问题”。我的错。我使用python是因为我需要伪代码来用其他语言实现这个函数,所以我的问题实际上是“如何编写这样的函数”,而不是“如何使用python专门提供的工具来解决这个问题”。因为我在寻找最简单的算法,使它更容易移植到其他语言,您能否编辑您的答案,以便实际返回列表列表(避免使用生成器)并避免使用同样特定于python的spread运算符?感谢我正在寻找最简单的算法,以便更容易地移植到其他语言,请您编辑您的答案,以便实际返回列表列表(避免使用生成器)并避免使用特定于python的spread运算符?谢谢