11

タイトルのその関数から取得する必要がある結果の数が得られないので、助けていただければ幸いです。

ドキュメント http://docs.python.org/library/itertools.html#itertools.combinationsを見ると、 結果の数は

返されたアイテムの数は n! /r!/ (nr)! 0 <= r <= n の場合、または r > n の場合はゼロ。

そして、それはそこの例で機能します

組み合わせ('ABCD', 2) --> AB AC AD BC BD CD

ンだから!/r!/ (nr)! = 4! / 2! / 2! = 6

でもやってみたら

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

これらの 15 の結果が得られます。しかしん!/r!/ (nr)! = 6! / 3!/ (6-3)! = 720 / 6 / 6 = 20

つまり、Python Docs には 20 個の結果が必要であると書かれていましたが、結果は 15 個になりました。

私が欠けているものを理解するのを手伝ってもらえますか? ウィキペディアの組み合わせエントリにあるように、その式は正しいはずなので、私の数学の何かかもしれません

ありがとう、P.

4

1 に答える 1

22

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)

于 2011-12-26T11:04:15.593 に答える