permutations combinatorial python function math

combinatorial - ¿Hay una función math nCr en python?



plot title python (2)

Posibles duplicados:
Estadísticas: combinaciones en Python
contar combinaciones y permutaciones de manera eficiente
Problema del proyecto euler en python (problema 53)

Estoy buscando ver si la biblioteca matemática en python está integrada en la función nCr (n Choose r):

Entiendo que esto se puede programar, pero pensé que verificaría si ya estaba incorporado antes que yo.


¿Quieres iteración? itertools.combinations . Uso común:

>>> import itertools >>> itertools.combinations(''abcd'',2) <itertools.combinations object at 0x01348F30> >>> list(itertools.combinations(''abcd'',2)) [(''a'', ''b''), (''a'', ''c''), (''a'', ''d''), (''b'', ''c''), (''b'', ''d''), (''c'', ''d'')] >>> [''''.join(x) for x in itertools.combinations(''abcd'',2)] [''ab'', ''ac'', ''ad'', ''bc'', ''bd'', ''cd'']

Si solo necesita calcular la fórmula, use math.factorial :

import math def nCr(n,r): f = math.factorial return f(n) / f(r) / f(n-r) if __name__ == ''__main__'': print nCr(4,2)

En Python 3, use la división de enteros // lugar de / para evitar desbordamientos:

return f(n) // f(r) // f(nr)

Salida

6


El siguiente programa calcula nCr de una manera eficiente (en comparación con el cálculo de factoriales, etc.)

import operator as op def ncr(n, r): r = min(r, n-r) numer = reduce(op.mul, xrange(n, n-r, -1), 1) denom = reduce(op.mul, xrange(1, r+1), 1) return numer//denom