Python如何生成允许元素重复的指定长度所有值组合?
问题原因
你使用的itertools.permutations用于生成无重复元素的排列,天然存在两个限制:
- 单个元素在每个排列结果中只能出现一次,因此不会输出
('yes', 'yes')、('no', 'no')这类包含重复值的结果 - 当指定的排列长度大于输入序列的元素总数时,不会返回任何结果,你的输入序列只有
['yes','no']2个元素,因此调用vals(3)时输出为空
解决方案
将permutations替换为itertools.product即可,该函数生成笛卡尔积,支持重复选取元素,完全匹配你需要的允许值重复、指定长度的有序组合需求。修改后的代码如下:
# 生成所有可能的组合 from itertools import product def vals(iterator): comb = product(['yes','no'], repeat=iterator) print(f"iter amount :{iterator}") for i in comb: print(i) vals(2) vals(3)
运行后会输出所有符合规则的组合,和你给出的预期输出逻辑一致。
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

