python - 寻找不同的组合

标签 python

如何找到 40 个字母字符串的所有组合?

我必须找出 20 D 有多少种组合和 20 R可以制作。

因为在一种组合中可能是......

DDDDDDDDDDDDDDDDDDDDRRRRRRRRRRRRRRRRRRRR

这是 1 个组合,现在我如何计算其余的?

最佳答案

要计算 20 个 D 和 20 个 R 的每个组合,我们可以认为有 40 个“槽位”,其中 20 个槽位将由 填充D,其余部分由R填充。所以,我们可以计算出combinations的总数使用C(40, 20),或者40选择20,可以用下面的公式表示:

40!/(20!*(40-20)!)

或者在 Python 中:

>>> import math
>>> math.factorial(40) / (math.factorial(20) * math.factorial(40-20))
137846528820L

请注意,这与具有 20 个 D 和 20 R< 的字符串的唯一排列数量相同,但是如果您只计算该字符串的排列数,您将计算出很多重复项,并且如果您尝试通过创建每个排列来计算它,则将花费很长时间。

如果您想实际生成唯一的排列(我不建议这样做),一种方法是使用 itertools.combinations(range(40), 20)。这里返回的每个元素都是一个由 20 个整数组成的元组,它们是该特定排列中每个 D 的索引。

关于python - 寻找不同的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699132/

相关文章:

python - 如何在 python 中为电子邮件创建消息 ID?

python - 在简单的 Python 脚本中列出超出范围的索引

python - scrapy 获取包括 child 在内的整个文本

python - sympy:使用二项式公式和二次补数简化较大的表达式

python - 在 Spyder 中打开 .GRIB 文件时出现 ECCODES 错误

python - 没有名为 'pkg_resources' 的模块

python - 如何从存储在列表中的多个数据帧中删除一列?

python - 按日期分组数据并在 python 中找到平均值

python - pygame 的随机线生成

python - 无法更改模型序列化程序中的验证字段错误消息