I have a list of lists that goes like
[[1,2,3],[3,4,5],[5,6,7,8]]
I want to create a program/function that creates a combinations like
1,3,5
1,3,6
1,3,7
1,3,8
1,4,5
1,4,6
.
.
.
If there's a way you can do it without using the itertools module, that would be even more appreciated.
you can use itertools.product
import itertools
a = [[1,2,3],[3,4,5],[5,6,7,8]]
list(itertools.product(*a))
#output
[(1, 3, 5),
(1, 3, 6),
(1, 3, 7),
(1, 3, 8),
(1, 4, 5),
(1, 4, 6),
(1, 4, 7),
(1, 4, 8),
(1, 5, 5),
(1, 5, 6),
(1, 5, 7),
(1, 5, 8),
(2, 3, 5),
(2, 3, 6),
(2, 3, 7),
(2, 3, 8),
(2, 4, 5),
(2, 4, 6),
(2, 4, 7),
(2, 4, 8),
(2, 5, 5),
(2, 5, 6),
(2, 5, 7),
(2, 5, 8),
(3, 3, 5),
(3, 3, 6),
(3, 3, 7),
(3, 3, 8),
(3, 4, 5),
(3, 4, 6),
(3, 4, 7),
(3, 4, 8),
(3, 5, 5),
(3, 5, 6),
(3, 5, 7),
(3, 5, 8)]
As you asked for a solution without itertools, this one is a recursive function that takes a list of any length and does the combination you need:
def combine(elems):
if len(elems) == 0:
return [[]]
result = []
subcombinations = combine(elems[1:])
for x in elems[0]:
for y in subcombinations:
result.append([x, *y])
return result
Or a much shorter version
def combine(elems):
if len(elems) == 0:
return [[]]
return [[x, *y] for x in elems[0] for y in combine(elems[1:])]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With