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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:02