# [Tutor] Need help combining elements of a list of lists

Steven D'Aprano steve at pearwood.info
Tue Jul 10 23:09:39 EDT 2018

```On Tue, Jul 10, 2018 at 09:46:57PM -0500, Jim wrote:

> Say I have a list like ltrs and I want to print out all the possible 3
> letter combinations. I want to combine letters from each inner list but
> not combine any letters within the inner list itself. So ACF and ADF
> would be ok but ABC would not.
>
> I can lay it out manually and see the pattern, I cannot figure out how
> to do it programically. Just in case this looks like homework it is not.
> It's a small test case I devised to try to figure it out so I can apply
> it to a bigger real world problem I am working on.
>
> ltrs = [['A', 'B'], ['C', 'D', 'E'], ['F', 'G', 'H', 'I']]

If you know that there are just three sublists, then you can do this:

for a in ltrs[0]:
for b in ltrs[1]:
for c in ltrs[2]:
print(a + b + c)

I trust that's easy enough to understand.

But here's a more general technique, where you don't need to know up
front how many nested lists there are:

from itertools import product  # short for "Cartesian Product"
for s in product(*ltrs):
print(''.join(s))

The *ltrs syntax might be a bit mysterious: it is called "sequence
unpacking", and tells the interpreter to use each item from ltrs as a
separate argument:

product(*ltrs)
=> product(ltrs[0], ltrs[1], ltrs[2])

--
Steve
```