2011-12-26 72 views
9

Tôi không nhận được số kết quả tôi nên lấy từ chức năng đó trong Tiêu đề, vì vậy tôi hy vọng sự giúp đỡ của bạn.Kết quả Python itertools.combinations '

Nhìn vào Documents http://docs.python.org/library/itertools.html#itertools.combinations số lượng kết quả nên

Số lượng các mục quay là n!/r!/(n-r)! khi 0 < = r < = n hoặc không khi r> n.

Và nó hoạt động ví dụ như trong đó

kết hợp ('ABCD', 2) -> AB AC AD BC BD CD

vì n!/r!/(n-r)! = 4!/2!/2! = 6

Nhưng nếu tôi cố gắng

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

tôi nhận được những 15 kết quả. Nhưng n!/r!/(n-r)! = 6!/3!/(6-3)! = 720/6/6 = 20

So: Python Documents nói với tôi rằng tôi nên có 20 kết quả, nhưng tôi nhận được 15.

bạn có thể vui lòng giúp tôi hiểu những gì tôi đang thiếu? Có lẽ là một cái gì đó trong toán học của tôi, như công thức mà nên đúng như nó đang ở trong Wikipedia Combination entry

Cảm ơn, P.

Trả lời

21

itertools.combinations nên được trả lại một iterator với 20 hạng mục:

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

Lưu ý rằng

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

và đầu ra posted

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

chỉ hiển thị kết hợp 2 chữ cái. Vì vậy, dường như bạn đã tính toán combinations('ABCDEF', 2), không phải combinations('ABCDEF', 3).

+0

Bạn nói đúng. Lỗi của tôi. Lỗi kép: một vì tôi đã viết "kết hợp ('ABCDEF', 3)" nhưng tôi thực sự đã thử với 2 thay vì 3. Lỗi thứ hai là chắc chắn với đối tượng có thể lặp lại mà tôi đang sử dụng với kết hợp(). Cảm ơn :-) – Paolo