【问题标题】:nesting to a dynamic depth in Python在 Python 中嵌套到动态深度
【发布时间】:2016-03-28 04:51:39
【问题描述】:

我正在尝试解决一个问题,该问题需要嵌套与列表中的项目一样多的层次。或者更准确地说,是列表中的可迭代对象。

def example(arg_list):
for i in arg_list[0]:
    for j in arg_list[1]:
        for k in arg_list[2]:
            print "{} {} {}".format(i,j,k)

只要 "arg_list" 是一个包含 3 个可迭代对象的列表,例如 [[1,3,4],[4,5,6], [9,3,2,1],上述函数就可以正常运行,0]]。如果列表中总是有四个迭代,那也很容易做到。我需要弄清楚如何创建一个函数,该函数将为添加到“arg_list”参数的每个迭代添加另一个嵌套级别。似乎递归可能是要走的路,但一直无法弄清楚。

【问题讨论】:

标签: python for-loop recursion nested


【解决方案1】:

您正在寻找的东西称为笛卡尔积。Python 的itertools 模块有一个函数可以为您完成。

from itertools import product

def example(arg_list):
    for items in product(*arg_list):
        print " ".join(str(item) for item in items)

【讨论】:

  • 这行得通,我应该检查一下 itertools。小编辑,由于产品是自己导入的,它应该是“for items in product(*arg_list):...无需说“...in itertools.product...”
【解决方案2】:

你可以使用递归,比如:

def example(arg_list, res=[]):
    if arg_list == []:
        print res
        return
    for i in arg_list[0]:
        example(arg_list[1:], res+[i])

【讨论】:

    猜你喜欢
    • 2012-12-01
    • 2019-04-03
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多