说我有一个L元素列表。这些元素可以是文字(字符串)和/或列表L',L'',......现在列表L'可以包含文字和/或列表。我想打开它们,以便获得所有文字组合的列表。这种组合看起来更容易展示而不是解释;所以我参考以下例子。
一个基本的例子:
L = [a,[b,c],d]
解决方案:
S = [[a,b,d],[a,c,d]]
解决方案是L的所有元素的组合。但第二个元素是另一个列表,所以我希望分别创建与列表中每个元素的组合。
更高级的例子:
L = [ a, [b,c], [d,[e]] ]
解决方案:
S = [ [a,b,d], [a,c,d], [a,b,e], [a,c,e] ]
我遍历每个子列表的元素以创建新组合。在第三个元素(列表[d,[e]]
)中,第二个元素是另一个列表。但它只包含一个元素e,所以当我遍历它时,它只会返回一个元素。
复杂的例子:
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'显示我正在解决的主要问题可能发生在次级问题上。为此我需要递归。
我有一个很大的预感,必须已经存在这种问题的现有算法(甚至是库;我正在使用python 3)。谁能为我指出正确的方向?我似乎无法自己解决这个问题。