递归列表展开算法

2024-09-28 17:15:17 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

假设我有一个元素列表。这些元素可以是文字(字符串)和/或列表L',L'',。。。现在list L'可以包含文字和/或列表。我想把它们展开,这样我就可以得到一个所有文字组合的列表。这个组合看起来是什么样的更容易显示而不是解释;所以我参考下面的例子。你知道吗

  1. 一个基本的例子:

    L = [a,[b,c],d]
    

    解决方案:

    S = [[a,b,d],[a,c,d]]
    

    解决方案是L的所有元素的组合。但是第二个元素是另一个列表,所以我希望分别创建一个列表中每个元素的组合。

  2. 更高级的示例:

    L = [ a, [b,c], [d,[e]] ]
    

    解决方案:

    S = [ [a,b,d], [a,c,d], [a,b,e], [a,c,e] ]
    

    我循环每个子列表的元素以创建新的组合。在第三个元素(list[d,[e]])中,第二个元素是另一个列表。但是它只包含一个元素e,所以当我在它上面循环时,它只返回一个元素。

  3. 复杂示例:

    L = [ [a,b], [ [c,d], [e,[f,g]] ] ]
    

    解决子问题,即第二个元素中的大列表:

    S' = [ [c,e,f], [c,e,g], [d,e,f], [d,e,g] ]
    

    部分解决的问题变成:

    L' = [ [a,b], [ [c,e,f], [c,e,g], [d,e,f], [d,e,g] ] ]
    

    最终解决方案为:

    S = [ [a,c,e,f], [a,c,e,g], [a,d,e,f], [a,d,e,g], [b,c,e,f], [b,c,e,g], [b,d,e,f], [b,d,e,g] ]
    

    S表示我正在解决的主要问题可能发生在子级别。为此,我需要递归。

问题

我有一个很大的预感,这类问题肯定已经有了一个现有的算法(甚至是一个库;我使用的是python3)。有人能为我指出正确的方向吗?我自己好像搞不懂。你知道吗


Tags: 字符串算法元素示例列表解决方案方向级别