Итерация по неизвестному числу вложенных циклов в python

У меня есть переменное количество пользовательских списков, каждое из которых содержит слова. Например, могут быть три списка, например:

list1 = ["THE", "A"]
list2 = ["ELEPHANT", "APPLE", "CAR"]
list3 = ["WALKED", "DROVE", "SAT"]

То, что я хочу, - это перебирать каждую комбинацию в каждом списке, проверяя каждый из словаря известных слов, чтобы увидеть, какие слова-группировки больше всего похожи на словарь. Это означает, что итерации будут выглядеть следующим образом:

[
    "THE ELEPHANT WALKED",
    "THE APPLE WALKED",
    "THE CAR WALKED",
    "THE ELEPHANT DROVE",
    "THE APPLE DROVE",
    "THE CAR DROVE",
    # ...
    "A CAR SAT",
]

Проблема в том, что может быть любое количество списков, и каждый список может содержать переменное количество элементов. Я знаю, что рекурсия может быть использована для этого, но мне нужно решение без рекурсии. Проблема, которую я сохраняю, заключается в том, что может быть переменное количество списков, иначе я просто напишу:

for a in list1:
    for b in list2:
        for c in list3:
            ...

Но я не знаю, где остановиться...

Ответы

Ответ 1

itertools.product делает именно то, что вы хотите:

from itertools import product

lists = [
    ['THE', 'A'],
    ['ELEPHANT', 'APPLE', 'CAR'],
    ['WALKED', 'DROVE', 'SAT']
]

for items in product(*lists):
    print items

Ответ 2

Использование python 3.2

from itertools import product

[" ".join(i) for i in product(list1,list2,list3)]