如何分别传播字符串列表?

时间:2018-02-07 09:45:21

标签: python list graph tree

将输入列表指定为:

l=[["A","B"],["C","D","E"],["F","G"]]

我想用这个清单做的是:

o = ["ACF", "ACG", "ADF", "ADG", "AEF", "AEG",
     "BCF", "BCG", "BDF", "BDG", "BEF", "BEG"]

首先,我尝试生成len的列表,以及标准函数reduce和functools mul的多个列表。

ls = list(map(len,l))
ll = ["" for i in range(reduce(mul, ls, 1))]

接下来,我没有效率或者#34; pythonic"解决这个问题的想法。

顺便说一下,这似乎与树遍历有类似的问题,但我认为这是多父树或与图实现相关的问题。

为了处理大量列表中的内存问题,如何使用有向图或任何其他算法使用python生成器解决这个问题?

1 个答案:

答案 0 :(得分:8)

使用itertools.product

>>> import itertools
>>> l=[["A","B"],["C","D","E"],["F","G"]]
>>> list(map(''.join,itertools.product(*l)))
['ACF', 'ACG', 'ADF', 'ADG', 'AEF', 'AEG', 'BCF', 'BCG', 'BDF', 'BDG', 'BEF', 'BEG']

来自文档:

  

输入可迭代的笛卡尔积。   大致相当于生成器表达式中的嵌套for循环。例如,对于B中的y,乘积(A,B)的返回值与(x中的x的(x,y)相同)。