大志を抱く少年記

野心だけはいっちょ前な理系大学院生のブログです。

nCr をpython で書くと。。


{}_nC_r = \frac{n!}{(n-r)!r!}

つまりn個からr個取り出す組み合わせというやつ。
これをPythonで書きたい。
そんなときは高階関数reduceを使う。

import operator as op
def ncr(n,r):
    r = min(n-r,r)
    if r == 0: return 1
    num_over = reduce(op.mul, xrange(n, n - r, -1))
    num_under = reduce(op.mul, xrange(1,r + 1))
    return num_over // num_under

lambda式でも書くなら、、

reduce(lambda x, y: x * y, xrange(n, n - r, -1))

みたいに書く。