这个问题在这里已有答案:
如何知道生成组合时使用的字符数和一系列长度的数量 combinations .
为了得到所有 permutations 我会使用:
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
minLen = 1
maxLen = 3
total = 0
for i in range(minLen,maxLen+1):
total += len(chars)**i
我如何为 combinations 这样做?当重复是 not 时 .
我确定有一个数学公式可以做到这一点,但我无法在任何地方找到它 .
谢谢!
EDIT:
我意识到代码可能不可读,所以这里是一个explenation:
很明显变量是什么:最小组合长度,最大值,使用过的字符......
for循环从1到3,每次将它加到 total
:字符长度(len(字符))到i的幂(当前迭代的长度) .
这是计算排列的基本方法 .
2 回答
那么,你实际上需要一种方法来计算二项式系数,对吧?
这可能不是最优化的实现,但它的工作原理:)
我相信你正在寻找scipy.misc.comb(它给你一个二项式的独特组合的数量(从N取X的形式):
等等..然后你可以得到一个很好的减少:
以上
reduce
是您的1-liner功能等同物:作为旁注,如果使用
comb(total_len, x, exact=True)
,您将得到整数而不是浮点数的结果 .