解包列表的递归列表的算法

时间:2017-03-28 10:22:45

标签: python python-3.x

问题

说我有一个L元素列表。这些元素可以是文字(字符串)和/或列表L',L'',......现在列表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] ]
    

    我遍历每个子列表的元素以创建新组合。在第三个元素(列表[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'显示我正在解决的主要问题可能发生在次级问题上。为此我需要递归。

  4. 问题

    我有一个很大的预感,必须已经存在这种问题的现有算法(甚至是库;我正在使用python 3)。谁能为我指出正确的方向?我似乎无法自己解决这个问题。

0 个答案:

没有答案