Python列表列表的所有组合

Mat*_* M. 5 python combinations tuples list python-itertools

所以我有一个字符串列表列表

[['a','b'],['c','d'],['e','f']]
Run Code Online (Sandbox Code Playgroud)

我想得到所有可能的组合,结果是

[['a','b'],['c','d'],['e','f'],
 ['a','b','c','d'],['a','b','e','f'],['c','d','e','f'],
 ['a','b','c','d','e','f']]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经提出了这段代码

input = [['a','b'],['c','d'],['e','f']]
combs = []
for i in xrange(1, len(input)+1):
    els = [x for x in itertools.combinations(input, i)]
    combs.extend(els)
print combs
Run Code Online (Sandbox Code Playgroud)

很大程度上遵循这篇文章的答案.

但结果是

[(['a','b'],),(['c','d'],),(['e','f'],),
 (['a','b'],['c','d']),(['a','b'],['e','f']),(['c','d'],['e','f']),
 (['a','b'],['c', 'd'],['e', 'f'])]
Run Code Online (Sandbox Code Playgroud)

我现在很难过,试图找到一种优雅,pythonic的方式解开那些元组.

Ana*_*mar 7

您可以使用itertools.chain.from_iterable将列表元组展平为列表.示例 -

import itertools
input = [['a','b'],['c','d'],['e','f']]
combs = []
for i in xrange(1, len(input)+1):
    els = [list(itertools.chain.from_iterable(x)) for x in itertools.combinations(input, i)]
    combs.extend(els)
Run Code Online (Sandbox Code Playgroud)

演示 -

>>> import itertools
>>> input = [['a','b'],['c','d'],['e','f']]
>>> combs = []
>>> for i in range(1, len(input)+1):
...     els = [list(itertools.chain.from_iterable(x)) for x in itertools.combinations(input, i)]
...     combs.extend(els)
...
>>> import pprint
>>> pprint.pprint(combs)
[['a', 'b'],
 ['c', 'd'],
 ['e', 'f'],
 ['a', 'b', 'c', 'd'],
 ['a', 'b', 'e', 'f'],
 ['c', 'd', 'e', 'f'],
 ['a', 'b', 'c', 'd', 'e', 'f']]
Run Code Online (Sandbox Code Playgroud)