Python 获取一些可能的组合

Python 获取一些可能的组合,python,combinations,Python,Combinations,如何获得一些可能的组合知道生成组合时使用的字符数和长度范围 要获得所有排列,我将使用: chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' minLen = 1 maxLen = 3 total = 0 for i in range(minLen,maxLen+1): total += len(chars)**i 对于组合,我将如何执行此操作?当不允许重复时 我确信有一个数学公式可以做到这一点,但我在任何地方都

如何获得一些可能的组合知道生成组合时使用的字符数和长度范围

要获得所有排列,我将使用:

chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
minLen = 1
maxLen = 3

total = 0
for i in range(minLen,maxLen+1):
    total += len(chars)**i
对于组合,我将如何执行此操作?当不允许重复时

我确信有一个数学公式可以做到这一点,但我在任何地方都找不到

谢谢

编辑:
我意识到代码可能不可读,因此这里有一个解释:

很明显,变量是什么:最小组合长度、最大值、使用的字符…

for循环从1变为3,每次它都将其添加到
:字符长度(len(chars))到i的幂(当前迭代的长度)


这是计算置换的基本方法。

所以,你实际上需要一种计算二项式系数的方法,对吗

import math

def binomial_cooefficient(n: int, k: int) -> int:
    n_fac = math.factorial(n)
    k_fac = math.factorial(k)
    n_minus_k_fac = math.factorial(n - k)
    return n_fac/(k_fac*n_minus_k_fac)

这可能不是最理想的实现,但它是有效的:)

因此,您实际上需要一种计算二项式系数的方法,对吗

import math

def binomial_cooefficient(n: int, k: int) -> int:
    n_fac = math.factorial(n)
    k_fac = math.factorial(k)
    n_minus_k_fac = math.factorial(n - k)
    return n_fac/(k_fac*n_minus_k_fac)

这可能不是最理想的实现,但它是有效的:)

我相信您正在寻找(它提供了二项式的唯一组合的数量(形式为从N取X):

以此类推……然后你可以得到一个很好的折扣:

>>> total_len = 10
>>> min_size = 1
>>> max_size = 2
>>> reduce(lambda acc, x: acc + comb(total_len, x), range(min_size, max_size+1), 0)
55.0
上述
reduce
是针对以下各项的1-liner功能等效:

>>> total = 0
    for x in range(min_size, max_size+1):
        total += comb(total_len, x)

作为旁注,如果你使用comb(total_len,x,exact=True)你将得到一个整数而不是一个浮点。

我相信你正在寻找(它给出了一个二项式的唯一组合的数量(形式为从N取x):

以此类推……然后你可以得到一个很好的折扣:

>>> total_len = 10
>>> min_size = 1
>>> max_size = 2
>>> reduce(lambda acc, x: acc + comb(total_len, x), range(min_size, max_size+1), 0)
55.0
上述
reduce
是针对以下各项的1-liner功能等效:

>>> total = 0
    for x in range(min_size, max_size+1):
        total += comb(total_len, x)

作为旁注,如果您使用
comb(total_len,x,exact=True)
您将得到一个整数而不是一个浮点。

我可能完全低估了您在这里要做的事情-但是您考虑的是[k-组合]()。如果是这样,这个问题可能是重复的。最好。我是。我不确定如何以编程方式实现它(所以我在这里问):)似乎是你在这里的朋友。你可以用嵌套for循环来做。在你的例子中,你可以用3个嵌套for循环并对其进行暴力。我正在处理数十万个数字。我不认为暴力强制是一个好主意。我可能完全低估了你在这里试图做的事情-但你是在想麻木吗[k-组合]()的er。如果是的话,这个问题可能是重复的。最好。我是。我不确定如何以编程方式实现这个(所以我在这里问):)似乎是你的朋友。你可以用嵌套for循环来实现它。在你的例子中,你可以有3个嵌套的for循环,然后强制执行它。我正在处理数十万个数字。我不认为暴力强迫是个好主意。谢谢!正是我需要的。谢谢!正是我需要的。