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

需生成指定重复非降序组合,应选用哪个itertools函数?

解决方案:使用itertools.combinations_with_replacement

嗨,你的需求完全可以用Python标准库itertools里的combinations_with_replacement函数来实现,它简直是为这个场景量身定做的!

为什么选它?

这个函数的核心特性正好匹配你的所有要求:

  • 生成指定长度的组合(这里是3)
  • 允许元素重复使用(比如生成[1,1,1]或[0,1,1])
  • 生成的组合是非递减的,完全不会出现[1,0,0]、[0,1,0]这类无序排列——因为它会严格按照输入数组的顺序来生成组合,保证元素不会逆序出现。

代码示例

import itertools

arr = [0, 1, 2]
# 生成组合,返回的是元组迭代器
combinations = itertools.combinations_with_replacement(arr, 3)
# 转成你需要的列表格式
result = [list(item) for item in combinations]
print(result)

运行这段代码后,输出正好是你想要的:

[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 1], [0, 1, 2], [0, 2, 2], [1, 1, 1], [1, 1, 2], [1, 2, 2], [2, 2, 2]]

为什么不选其他函数?

  • itertools.combinations:不允许元素重复,生成的都是无重复的组合,不符合你需要重复值的要求。
  • itertools.product:会生成所有可能的排列(包括逆序的),比如(1,0,0)这种你不想要的组合都会出现,不符合条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:42:52