关于python:结合两个列表(所以[[‘a’,’b’],[‘c’,’d’]] = [‘ac’,’ad’,’bc’,’bd])pythonic方式

Combining two lists ( so [['a', 'b'], ['c', 'd']] = ['ac', 'ad', 'bc', 'bd] ) the pythonic way

本问题已经有最佳答案,请猛点这里访问。

给出一个列表,例如:

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

结果应该是:

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

嵌套列表的长度不同。必须保持顺序——即第一个字母必须来自第一个列表,第二个字母必须来自第二个列表,等等。

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

1
2
3
4
5
6
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)

不过,我觉得应该有一个快速,甚至一行,这样做的方式,可能使用减少功能。有什么想法吗?

谢谢您!

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


1
2
3
4
5
6
>>> 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']