将输入列表指定为:
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生成器解决这个问题?
答案 0 :(得分:8)
>>> 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)相同)。