Python中的组合 - 费米 - 狄拉克统计

时间:2017-06-27 14:04:54

标签: python combinatorics

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))

2 个答案:

答案 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