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:
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.
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
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)
6