你想要迭代吗?使用
itertools.combinations
。常见用法:
>>> import itertools
>>> itertools.combinations('abcd', 2)
<itertools.combinations object at 0x104e9f010>
>>> 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']
如果你只需要计算公式,可以使用
math.factorial
,但对于大的组合来说速度不快,但是请参考下面的
math.comb
,这是Python 3.8+中提供的优化计算方法。
import math
def ncr(n, r):
f = math.factorial
return f(n) // f(r) // f(n-r)
print(ncr(4, 2))
从Python 3.8开始,可以使用
math.comb
函数,而且速度更快:
>>> import math
>>> math.comb(4,2)
6
import scipy.misc
,然后使用scipy.misc.comb(N,k)
。 - Aziz Alto