The itertools.combinations is your friend here.
Note: I only added the combinations to another list, powerset
, for exemplary purposes. In many cases, the number of combinations may be huge, and if you were to process the combinations somehow, you would probably want to process each combination separately and not save them to a list. Unless that's your end goal.
import itertools
list1 = ["a", "b"]
list2 = ["item1", "item2", "item3", "item4"]
powerset = []
for k in range(1, len(list2)+1):
for combination in itertools.combinations(list2, k):
powerset.append(list1 + list(combination))
Resulting powerset
:
[['a', 'b', 'item1'],
['a', 'b', 'item2'],
['a', 'b', 'item3'],
['a', 'b', 'item4'],
['a', 'b', 'item1', 'item2'],
['a', 'b', 'item1', 'item3'],
['a', 'b', 'item1', 'item4'],
['a', 'b', 'item2', 'item3'],
['a', 'b', 'item2', 'item4'],
['a', 'b', 'item3', 'item4'],
['a', 'b', 'item1', 'item2', 'item3'],
['a', 'b', 'item1', 'item2', 'item4'],
['a', 'b', 'item1', 'item3', 'item4'],
['a', 'b', 'item2', 'item3', 'item4'],
['a', 'b', 'item1', 'item2', 'item3', 'item4']]
Short explanation
From the docs: The itertools.combinations(iterable, r)
yields all r
length subsequences of elements from the input iterable
. The iterable
can be any iterable, like a list
or a tuple
.
In general iterable is any python object with the __iter__
method that returns an iterator (an object which implements __next__
); iterables can be looped over with for
loops.