What you want is a carthesian product. itertools
has a function product
that does exactly that:
import itertools
a = [[1, 2, 3], [4, 5], [3], [1]]
p = itertools.product(*a)
print list(p)
This outputs
[(1, 4, 3, 1),
(1, 5, 3, 1),
(2, 4, 3, 1),
(2, 5, 3, 1),
(3, 4, 3, 1),
(3, 5, 3, 1)]