Skip to main content
 首页 » 编程设计

python之确定可能组合的数量

2025年05月04日19虾米姐

我想弄清楚有多少种可能的方法可以将各种元素组合成这个字符串。

"{Hello|Hi|Hey} {world|earth}{!|.|?}" 

从每个组 ({}) 中随机选择一个项目(用竖线/| 分隔)并组合成一个字符串。

所以上面的"template"可以产生:

Hello world. 
Hi earth? 
Hey world. 
Hi world? 

我猜这是一种排列,但我想确保我做对了。

如果这也适用于“n”个嵌套项目,那就太好了。

"{{Hello|Hi|Hey} {world|earth}|{Goodbye|farewell} {noobs|n3wbz|n00blets}}" 

如果可能的话,我更喜欢基于数学/统计的解决方案而不是暴力循环来获得答案。

谢谢!

请您参考如下方法:

那么,在您的第一个示例中有 3 x 2 x 3 = 18 种组合。

你的第二个例子是 3 x 4 x 2 x 3 = 72 种组合。

虽然我不完全确定您所说的 {a|b}|{c|d} 是什么意思,但我假设您的意思是选择 (a 或 b) 或 ( c 或 d), 共 4 种选择。

您可能想阅读组合 here或 here .


更新:是的,就这么简单。您的问题就像计算数字中数字组合的数量一样。例如,如果我想查找 ATM PIN 号码(4 位十进制数字)的组合数,我有集合 {0-9}、{0-9}、{0-9}、{0-9}。第一选择有 10 种可能(=10)。对于这些数字中的每一个,第二个选择都有 10 种可能性 (= 10 × 10)。对于每一个,第三个有 10 个(= 10 × 10 × 10 ),第四个有 10 个(= 10 × 10 × 10 × 10 = 10,000)。直观上应该很清楚,一个 4 位十进制数有 10,000 种可能。

您的示例使用单词组而不是数字组,但原理是相同的。组合数为集合1的项数×集合2的项数×...×集合n的项数等。

当您开始设置限制或从同一组中挑选多个项目时,情况会变得更加复杂,等等。