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'] |