2012-11-18 75 views
15

我有可變數量的用戶定義列表,每個列表包含單詞。例如,可能有三個列表如下所示:在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: 
      ... 

但我不知道在哪裏停止...

回答

24

itertools.product不正是你想要什麼:

from itertools import product 

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

for items in product(*lists): 
    print items 
+2

鑑於他不知道名單的produc數量,'' t(*列表)''可能更適合。 –

+1

@Lattyware:在你評論的時候是這樣做的 – Eric

+0

偉大的思想家都認爲,+1。 –

1

使用Python 3.2

from itertools import product 

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