Y a-t-il une fonction mathématique nCr en python? [dupliquer]

duplicata possibles:

statistiques: combinaisons en Python

Compter efficacement les combinaisons et les permutations

Project euler problem in python (problem 53)

je cherche à voir si la bibliothèque de maths en python est la nCr (n choisir R) de la fonction:

enter image description here

je comprends que cela peut être programmé mais j'ai pensé que je vérifierais pour voir si c'est déjà intégré avant que je le fasse.

107
demandé sur Community 2011-02-09 08:51:13

2 réponses

le programme suivant calcule nCr d'une manière efficace (par rapport au calcul des facteurs, 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
116
répondu dheerosaur 2018-03-08 10:38:56

voulez-vous une itération? itertools.les combinaisons . Usage commun:

>>> 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.factoriel :

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, Utilisez la division entière // au lieu de / pour éviter les débordements:

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

sortie

6
128
répondu Mark Tolonen 2017-02-21 17:59:46