Python如何生成无连续重复元素的定长整数元组?
解决方案
这里分两种实现思路,按需选择即可:
方案1:直接过滤现有product结果(短序列首选)
代码写法简单易维护,适合元组长度不大(建议<=10)的场景:
import itertools n = 3 length = 5 # 过滤逻辑:检查元组中所有相邻元素都不相等 result = [ t for t in itertools.product(range(n), repeat=length) if all(a != b for a, b in zip(t, t[1:])) ]
逻辑说明:zip(t, t[1:])会把元组的相邻元素两两配对,all()判断所有配对的元素都不相等时才保留该元组。
方案2:直接生成符合要求的元组(长序列首选)
如果元组长度很大,直接生成所有product再过滤会浪费大量内存和算力,用递归方式直接生成符合要求的元组,无额外冗余计算:
def generate_no_duplicate_consecutive(n: int, length: int): if length == 0: yield () return # 遍历前一位的所有可选值 for prev_num in range(n): # 递归生成后续长度的符合要求的元组 for suffix in generate_no_duplicate_consecutive(n, length - 1): # 保证前一位和后缀的第一位不相等 if not suffix or prev_num != suffix[0]: yield (prev_num,) + suffix # 调用示例 n = 3 length = 5 result = list(generate_no_duplicate_consecutive(n, length))
该方案的时间复杂度和最终生成的元组数量完全匹配,总共有n * (n-1)^(length-1)个结果,没有冗余计算。
内容的提问来源于stack exchange,提问作者Simd
相关产品推荐
相关产品推荐

