使用itertools在python中的组合

时间:2016-12-08 23:07:27

标签: python math combinations

你好有没有办法在python中做5C2?我是python中的菜鸟,我无法在任何地方找到答案。答案必须是10.我一直试图玩,但我只能得到错误,这是我需要得到的代码10

from itertools import *
    print(combinations(5,2))

它给了我:

TypeError: 'int' object is not iterable

感谢任何帮助

3 个答案:

答案 0 :(得分:1)

In [35]: def choose(n,k):
   ....:     return math.factorial(n)/(math.factorial(k)*math.factorial(n-k))
   ....: 

In [36]: choose(5,3)
Out[36]: 10.0

别忘了导入数学

答案 1 :(得分:1)

由于您明确要求使用itertools 查找组合的数量,解决方案将是

import itertools
print len(list(itertools.combinations(range(5),2)))

让我解释一下:itertools.combinations(iterator, k)将迭代器(可以是列表)和从该列表中选择的元素数作为参数。您可以直接返回该列表,而不是回答可以从该列表中绘制多少k个元组元组的组合的问题。 因此,给定一个n元素列表,从中可以绘制所有k - 元组并查看该列表的长度,为您提供二项式系数。

当然,有更简单的方法来计算二项式系数,例如, scipy.special.binom

import scipy
print scipy.special.binom(5,2) 

答案 2 :(得分:0)

如果目标是求组合数(n选k)为一个数,在我看来,以下是最简单的方法,如果可以使用Python 3.8。
从 Python 3.8 开始,数学模块中有 math.comb(n, k) 函数。

import math

print(math.comb(5,2))

给予

10

一些参考:
https://www.w3schools.com/python/ref_math_comb.asp
https://www.geeksforgeeks.org/python-math-comb-method/