2011-12-26 70 views
9

我沒有得到我應該從標題中的該函數獲得的結果數量,所以我希望能得到您的幫助。Python itertools.combinations的結果

望着文檔 http://docs.python.org/library/itertools.html#itertools.combinations 結果的數量應該是

返回的項目數爲n!/r! /(n-r)!當r> n時,0 < = r < = n或 爲零。

而且它在那裏

組合作品爲例子( 'ABCD',2) - > AB AC AD BC BD光盤

因爲N!/r! /(n-r)! = 4!/2!/2! = 6

但如果我嘗試

combinations('ABCDEF', 3) --> AB AC AD AE AF BC BD BE BF CD CE CF DE DF EF 

我得到那些15分的結果。 但是!/r! /(n-r)! = 6!/3! /(6-3)! =六分之七百二十/ 6 = 20

因此:Python的文檔告訴我,我應該有20個結果,但我得到15

能否請您幫助我理解我缺少的是什麼?也許東西在我的數學,作爲公式應該是正確的,因爲它是在Wikipedia Combination entry

感謝, P.

回答

21

itertools.combinations應該返回與20個項目的迭代器:

In [40]: len(list(itertools.combinations('ABCDEF',3))) 
Out[40]: 20 

注意

In [41]: len(list(itertools.combinations('ABCDEF',2))) 
Out[41]: 15 

和輸出發佈

combinations('ABCDEF', 3) --> AB AC AD AE AF BC BD BE BF CD CE CF DE DF EF 

只顯示2個字母的組合。所以看起來你已經計算了 combinations('ABCDEF', 2),而不是combinations('ABCDEF', 3)

+0

你說得對。我的錯。雙重錯誤:因爲我寫了「combination('ABCDEF',3)」,但我真的用2而不是3來嘗試。 第二個錯誤肯定與組合使用的可迭代對象()。謝謝 :-) – Paolo 2011-12-26 11:15:23