Ответ 1
itertools.product
делает именно то, что вы хотите:
from itertools import product
lists = [
['THE', 'A'],
['ELEPHANT', 'APPLE', 'CAR'],
['WALKED', 'DROVE', 'SAT']
]
for items in product(*lists):
print items
У меня есть переменное количество пользовательских списков, каждое из которых содержит слова. Например, могут быть три списка, например:
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:
...
Но я не знаю, где остановиться...
itertools.product
делает именно то, что вы хотите:
from itertools import product
lists = [
['THE', 'A'],
['ELEPHANT', 'APPLE', 'CAR'],
['WALKED', 'DROVE', 'SAT']
]
for items in product(*lists):
print items
Использование python 3.2
from itertools import product
[" ".join(i) for i in product(list1,list2,list3)]