结合两个列表([[' a',' b'],[' c',' d']] = [&# 39; ac',' ad',' bc',' bd])pythonic方式

时间:2014-12-05 00:49:26

标签: python python-2.7 recursion

给出一系列列表,例如:

[['a', 'b'], ['c', 'd'], ['e']] 

结果应该是:

['ace', 'ade', 'bce', 'bde']  

嵌套列表的长度不同。必须保持订单 - 即首字母必须来自第一个清单,第二个字母必须来自第二个清单等。

这是我当前的递归解决方案:

def combine_letters(l)
    if len(l) == 0: 
        return l[0]
    temp = [x + y for x in l[0] for y in l[1]] 
    new = [temp] + l[2:]
    return combine_letters(new)

然而,我觉得应该有一个快速,甚至一行的方式来做到这一点,可能使用reduce函数。有什么想法吗?

谢谢!

编辑:这与链接的问题并不完全相似。首先,它适用于任意数量的子列表。其次,它返回字符串而不是元组。

1 个答案:

答案 0 :(得分:4)

>>> L = [['a', 'b'], ['c', 'd'], ['e']]
>>> import itertools
>>> list(itertools.product(*L))
[('a', 'c', 'e'), ('a', 'd', 'e'), ('b', 'c', 'e'), ('b', 'd', 'e')]
>>> list(''.join(tup) for tup in list(itertools.product(*L)))
['ace', 'ade', 'bce', 'bde']