Python-Fermi-Dirac统计中的组合数学

Python-Fermi-Dirac统计中的组合数学,python,combinatorics,Python,Combinatorics,费米-狄拉克统计表明,可分辨粒子在宏观状态内的微观状态数遵循以下形式的方程: 组合=m/((m-N)!N 假设m是容器中弹性球的数量,N是你取出的弹性球的数量,这告诉我们有多少种独特的方法可以取出N

费米-狄拉克统计表明,可分辨粒子在宏观状态内的微观状态数遵循以下形式的方程:

组合=m/((m-N)!N

假设m是容器中弹性球的数量,N是你取出的弹性球的数量,这告诉我们有多少种独特的方法可以取出N 我正在尝试用python编写一个代码来读取每个组合,需要一些帮助。到目前为止,我所拥有的只是脚本,它告诉我有多少个组合。如果m=4和N=2,则有6个组合。我需要编写一个代码,告诉我这些组合是第一个和第二个、第一个和第三个、第一个和第四个、第二个和第三个,第二个和第三个和第四个。现在对于小m来说,这很容易用手来做,但你可以看到这很快变得单调。有人能帮我写一个脚本来做这件事吗

导入数学
打印“输入m的值”
m=int(原始输入();
打印“输入N的值”
N=int(原始输入());

打印math.factorial(m)/(math.factorial(m-N)*math.factorial(N))
这里是一个应该处理这个问题的算法的快速草图

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

使用itertools.compositions很简单

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文档:
Itertools docs for Python 3.6:

ps。如果你投了反对票,了解原因会很有帮助,这样我就不会问措辞拙劣的问题了!如果你不需要真正优化性能或使用Itertools组合,我只需要编写一些小的递归算法()你完全改变了问题。如果你有一个不同的问题,创建一个新的问题。我的朋友认为完全改变我的问题会很有趣。我很抱歉每个人都同意你!我会尝试一下!使用itertools.combines。它在标准库中。甚至有伪代码。你能解释一下这个算法吗一点点?我很难把我的问题融入其中。这就是为什么你应该使用itertools.combines。你不需要编码,因此你或其作者不可能引入错误(没有不尊重的意思,Erik)没有不尊重巴尼。如果我总是写完美的代码,我会赚更多的钱。