Fermi Dirac统计数据表明,宏观状态中可区分粒子的微观状态数遵循以下形式的等式:
组合= m!/((m-N)!N!
假装m是容器中弹力球的数量,N是你正在拿出的弹力球的数量,这告诉我们有多少独特的方法你可以拿出N球,N<米。
我正在尝试在python中编写代码来读出每个组合,并需要一些帮助。到目前为止,我所有的脚本都告诉我有多少组合。如果m = 4且N = 2,则有6种组合。我需要编写一个代码,告诉我那些组合是第一个和第二个,第一个和第三个,第一个和第四个,第二个和第三个,第二个和第四个,第三个和第四个。现在对于小米来说,这很容易手工完成,但你可以看到这很快就会变得单调。有人可以帮我写一个脚本来做这个吗?
import math
print 'Enter a Value for m'
m = int(raw_input());
print 'Enter a Value for N'
N = int(raw_input());
print math.factorial(m)/(math.factorial(m-N)*math.factorial(N))
答案 0 :(得分:1)
使用itertools.combinations
这是微不足道的import itertools
M=4
N=2
for combo in itertools.combinations(range(M),N):
print combo
输出:
(0, 1)
(0, 2)
(0, 3)
(1, 2)
(1, 3)
(2, 3)
Python 2.7的Itertools文档:https://docs.python.org/2/library/itertools.html 适用于Python 3.6的Itertools文档:https://docs.python.org/3/library/itertools.html
答案 1 :(得分:0)
这是一个应该处理这个问题的算法的快速草图。
def combinations(currentPosition, maxPosition, numToInclude):
if numToInclude = 0 or currentPosition > maxPosition:
return [[]]
finalList = []
listOfCombinations = combinations(currentPosition+1,maxPosition,numToInclude-1)
for i in range(len(listOfCombinations)):
finalList[2*i] = [1] + listOfCombinations[i]
finalList[2*i+1] = [0] + listOfCombinations[i]
return finalList