How to get all combinations of list of size k (where k > length of the list) in python?

Viewed 1011

This prints nothing:

from itertools import combinations
comb = combinations([1,2], 3)
for i in comb:
    print(i)

I want output as :

(1,2,2) (1,2,1) (1,1,2) (1,1,1) (2,1,2) (2,1,1) (2,2,1) (2,2,2)
2 Answers

Seems like you just want the product, not combinations:

from itertools import product

for i in product([1, 2], repeat=3):
    print(i)

combinations is getting you unique combinations without reusing elements within any combination, which means pulling three elements from two source elements is impossible. It's also order-insensitive, so it wouldn't give you (1, 2) and (2, 1) even if you only asked for combinations of size 2 (only permutations would do that). In your case, you seem to want to cycle every element through every index, allowing repeats (which combinations/permutations won't do) and order-sensitive (which combinations_with_replacement won't do), which leaves product.

You can't generate 3 element combinations from a 2 item list. Try this:

comb = combinations([1,2]*3, 3)

This basically extends the iterable to a 6-item list ([1, 2, 1, 2, 1, 2]).

Related