一、编写函数计算组合数
def Combinatorial(n,i):
'''设计组合数'''
#n>=i
Min=min(i,n-i)
result=1
for j in range(0,Min):
#由于浮点数精度问题不能用//
result=result*(n-j)/(Min-j)
return result
if __name__ == '__main__':
print(int(Combinatorial(45,2)))
二、使用第三方模块scipy计算排列组合的具体数值
from scipy.special import comb, perm
#计算排列数
A=perm(3,2)
#计算组合数
C=comb(45,2)
print(A,C)
使用阶乘的方式求组合数
import math
def factorial_me(n):
'''建立求阶乘的函数'''
result = 1
for i in range(2, n + 1):
result = result * i
return result
def comb_1(n,m):
# 直接使用math里的阶乘函数计算组合数
return math.factorial(n)//(math.factorial(n-m)*math.factorial(m))
def comb_2(n,m):
# 使用自己的阶乘函数计算组合数
return factorial_me(n)//(factorial_me(n-m)*factorial_me(m))
def perm_1(n,m):
# 直接使用math里的阶乘函数计算排列数
return math.factorial(n)//math.factorial(n-m)
def perm_2(n,m):
# 使用自己的阶乘函数计算排列数
return factorial_me(n)//factorial_me(n-m)
if __name__ == '__main__':
print(factorial_me(6))
print(comb_1(45,2))
print(comb_2(45,2))
print(perm_1(45,2))
print(perm_2(45,2))
三、使用itertools列出排列组合的全部情况
from itertools import combinations, permutations
# 列举排列结果[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
print(list(permutations([i for i in range(1,4)],2)))
#列举组合结果[(1, 2), (1, 3), (2, 3)]
print(list(combinations([1,2,3],2)))