2010-08-06 89 views
1

當我在組合列表內的列表時,我迫切需要一些算法的幫助。假設我有以下數據結構:列表的列表的所有可能的組合

 
fields = [ ['a1', 'a2', 'a3'], 
      ['b1', 'b2', 'b3'], 
      ['c1', 'c2', 'c3'], 
      ['d1', 'd2', 'd3'] ] 

我想寫一個發電機(蟒蛇),將產生項目的每個可能的組合,使下面的代碼:

 
for x in thegenerator(fields): 
    print(x) 

會給下面的輸出:

 
['a1', 'b1', 'c1', 'd1'] 
['a1', 'b1', 'c1', 'd2'] 
['a1', 'b1', 'c1', 'd3'] 
['a1', 'b1', 'c2', 'd1'] 
['a1', 'b1', 'c2', 'd2'] 
['a1', 'b1', 'c2', 'd3'] 
... 
['a3', 'b3', 'c3', 'd3'] 

然而,我的心態是完全關閉,所以今天我無法想象我如何最好可以遍歷結構得到所有組合最乾淨的WA Ÿ使用Python。我確信這是以前由某人完成的,但是在Google和堆棧上進行了一些搜索之後,我放棄了找到正確的關鍵字組合,以便爲這個問題尋找合適的算法。

任何想法什麼是最乾淨的算法來解決這個問題?

回答

3
itertools.product(*fields) 
+0

你說得對。已經簡單地查看了itertools.product,但顯然不夠好,因爲我認爲功能做了一些改變。 謝謝! – agnsaft 2010-08-06 20:59:27

10

只需使用itertools.product,它完全符合您的要求。如果您對算法感興趣,可以隨時查看源代碼。

+0

不錯的一個。 5更多 – InsertNickHere 2010-08-06 19:53:31

+0

*慚愧* ...沒有。我查看了itertools的手冊條目,顯然錯過了這一條。謝謝。 – agnsaft 2010-08-06 21:00:12