You can create a new list using itertools.combinations
in conjunction with a very efficient and relatively succinct construct called a list comprehension. However for doing this it got a little complicated partially by the fact that not all of the items in the final list are themselves not nested lists. I actually suspect having it that way will make it harder for you to process the list later on, but, regardless, here's the simplest implementation I've been able to devise which produces exactly the list you said you wanted:
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:])
Output:
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']]