You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成多罐取球的所有组合列表:20球罐取3+两5球罐各取1

解决方案

这问题正好可以用Python的itertools模块轻松搞定,核心思路是先分别生成每个罐子的取球组合,再把它们的所有可能搭配组合起来。

具体实现步骤

  • 首先导入itertools模块,它提供了专门处理组合、笛卡尔积的工具函数;
  • 针对20球的罐子,用combinations(range(1,21), 3)生成所有取3个球的组合;
  • 对两个5球的罐子,分别用combinations(range(1,6), 1)生成取1个球的所有组合(当然也可以直接用range(1,6),不过用combinations能保证返回格式是元组,和前面的结果更统一);
  • 最后用itertools.product把这三个组合集合做笛卡尔积,就能得到所有跨罐子的取球组合了。

完整代码示例

import itertools

# 生成20球罐取3个的所有组合
jar_20 = itertools.combinations(range(1, 21), 3)
# 两个5球罐各取1个的组合
jar_5_1 = itertools.combinations(range(1, 6), 1)
jar_5_2 = itertools.combinations(range(1, 6), 1)

# 生成所有可能的跨罐组合,每个元素是(20球的3元组, 第一个5球的1元组, 第二个5球的1元组)
all_combos = itertools.product(jar_20, jar_5_1, jar_5_2)

# 如果想把每个组合合并成一个单一的元组(比如把取出的5个球放在一个元组里),可以用这个生成器
flattened_combos = (combo_20 + combo_5a + combo_5b for combo_20, combo_5a, combo_5b in all_combos)

# 转换成列表查看结果(总共有 1140*5*5=28500 个组合,内存完全没问题)
result = list(flattened_combos)

额外说明

  • itertools.product的作用就是把多个可迭代对象的所有元素进行配对,完美匹配我们“从三个罐子分别取球的所有组合”的需求;
  • 如果不需要区分每个罐子的取球结果,直接拼接元组就能得到一个包含所有取出球的单一元组;
  • 要是你处理的是更大规模的数据集,建议保留迭代器形式(不用转成列表),这样能节省内存。

内容的提问来源于stack exchange,提问作者user2505650

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:00