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循环,然后强制执行它。我正在处理数十万个数字。我不认为暴力强迫是个好主意。谢谢!正是我需要的。谢谢!正是我需要的。