Python 以深度优先搜索方式附加任意嵌套列表的元素,无需递归

Python 以深度优先搜索方式附加任意嵌套列表的元素,无需递归,python,depth-first-search,Python,Depth First Search,这个列表可以更深,也可以更浅,但假设我有一个深度2的列表,如下所示: a = [['a','b'],['c','d'],['e','f']] def f(elems): curr, *rest = elems if not rest: return ''.join(curr) ret = [''.join(x + f(rest)) for x in curr] return ret 我想写一个函数,f(a),这样它将返回以下新列表: ['a

这个列表可以更深,也可以更浅,但假设我有一个深度2的列表,如下所示:

a = [['a','b'],['c','d'],['e','f']]
def f(elems):
    curr, *rest = elems

    if not rest:
        return ''.join(curr)

    ret = [''.join(x + f(rest)) for x in curr]
    return ret
我想写一个函数,
f(a)
,这样它将返回以下新列表:

['acef', 'adef', 'bcef', 'bdef']
本质上,我是在模仿深度优先搜索,其中列表是节点。我希望函数使用depth=n,其中n是任意整数。实现这一目标的最具Python风格的方式是什么

我的递归代码如下所示:

a = [['a','b'],['c','d'],['e','f']]
def f(elems):
    curr, *rest = elems

    if not rest:
        return ''.join(curr)

    ret = [''.join(x + f(rest)) for x in curr]
    return ret
我将如何迭代地解决这个问题

您可以使用:

这使得:

['acef', 'adef', 'bcef', 'bdef']

您的输出不是有效的Python数据结构。另外,为什么它看起来像是
['e','f']
列表得到了特殊处理?您是否使用“深度”来表示长度?这看起来像是除最后一个元素之外的所有元素组合,然后连接最后一个元素的元素。不确定你的算法是否完全清楚。(但如果是的话,你可能会有解决办法)@user2357112哦,我明白你的意思了。它是一个修改的DFS,所以最后一个元素总是将其所有元素连接在一起。是深度=当我调用
f(a)
时,我得到
ValueError:需要超过0个值才能解包
。你能再检查一下这个功能吗?