web-dev-qa-db-fra.com

Existe-t-il une fonction mathématique nCr en python?

Doublons possibles:
Statistiques: combinaisons en Python
compter les combinaisons et les permutations efficacement
problème du projet euler dans python (problème 53)

Je cherche à savoir si la fonction nCr (n Choose r) est intégrée à la bibliothèque mathématique de python:

enter image description here

Je comprends que cela peut être programmé, mais j’ai pensé que j’aimerais vérifier s’il est déjà intégré avant moi.

140
James Mertz

Le programme suivant calcule nCr de manière efficace (par rapport au calcul des factorielles, etc.)

import operator as op
from functools import reduce

def ncr(n, r):
    r = min(r, n-r)
    numer = reduce(op.mul, range(n, n-r, -1), 1)
    denom = reduce(op.mul, range(1, r+1), 1)
    return numer / denom
147
dheerosaur

Voulez-vous l'itération? itertools.combinations . Usage courant:

>>> 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 vous avez juste besoin de calculer la formule, utilisez math.factorial :

import math

def nCr(n,r):
    f = math.factorial
    return f(n) / f(r) / f(n-r)

if __== '__main__':
    print nCr(4,2)

Dans Python 3, utilisez la division entière // au lieu de / pour éviter les débordements:

return f(n) // f(r) // f(n-r)

Sortie

6
160
Mark Tolonen