需生成指定重复非降序组合,应选用哪个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
相关产品推荐
相关产品推荐

