20

私は可変数のユーザー定義リストを持っており、それぞれに単語が含まれています。たとえば、次のような 3 つのリストがある場合があります。

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:
            ...

でも、どこで止めればいいのかわからない…

4

2 に答える 2

29

itertools.productあなたが望むことを正確に行います:

from itertools import product

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

for items in product(*lists):
    print(items)
于 2012-11-18T18:12:15.677 に答える
1

Python 3.2 の使用

from itertools import product

[" ".join(i) for i in product(list1,list2,list3)]
于 2012-11-19T14:54:00.340 に答える