itertools.combinations
您可以结合使用称为列表理解的非常有效且相对简洁的构造来创建新列表。然而,由于并非最终列表中的所有项目本身都不是嵌套列表,因此这样做有点复杂。我实际上怀疑这样会使您以后处理列表变得更加困难,但是,无论如何,这是我能够设计的最简单的实现,它会产生您所说的想要的列表:
from itertools import combinations
a = ['D1', 'C1', 'D2', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5']
b = [item for sublist in (list(combo[0] if len(combo) < 2 else list(combo)
for combo in combinations(a, n))
for n in range(1, len(a)+1)) for item in sublist]
from pprint import pprint # print the result
print 'b = \\'
pprint(b[:14] + ['... lines omitted ...'] + b[-14:])
输出:
b = \
['D1',
'C1',
'D2',
'C2',
'D3',
'C3',
'D4',
'C4',
'D5',
'C5',
['D1', 'C1'],
['D1', 'D2'],
['D1', 'C2'],
['D1', 'D3'],
'... lines omitted ...',
['C1', 'D2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5'],
['C1', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5'],
['D2', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5'],
['D1', 'C1', 'D2', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5'],
['D1', 'C1', 'D2', 'C2', 'D3', 'C3', 'D4', 'C4', 'C5'],
['D1', 'C1', 'D2', 'C2', 'D3', 'C3', 'D4', 'D5', 'C5'],
['D1', 'C1', 'D2', 'C2', 'D3', 'C3', 'C4', 'D5', 'C5'],
['D1', 'C1', 'D2', 'C2', 'D3', 'D4', 'C4', 'D5', 'C5'],
['D1', 'C1', 'D2', 'C2', 'C3', 'D4', 'C4', 'D5', 'C5'],
['D1', 'C1', 'D2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5'],
['D1', 'C1', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5'],
['D1', 'D2', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5'],
['C1', 'D2', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5'],
['D1', 'C1', 'D2', 'C2', 'D3', 'C3', 'D4', 'C4', 'D5', 'C5']]