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

技术问询:生成列表各起始位置最长连续相同元素长度列表的方法

嘿,我来帮你补全这个解决方案,并且把每一步的逻辑掰扯清楚~

实现每个位置的最长连续相同元素长度

先直接上完整可运行的代码,再一步步解释逻辑:

完整代码

x_list = [1, 1, 2, 3, 3, 3]

# 第一步:先把原列表转换成「连续元素+对应长度」的元组列表
freq_list = []
current = x_list[0]
count = 0
for num in x_list:
    if num == current:
        count += 1
    else:
        freq_list.append((current, count))
        current = num
        count = 1
# 循环结束后别忘了把最后一组元素加进去,不然会漏掉
freq_list.append((current, count))

# 第二步:根据上面的频率列表生成目标结果
run_list = []
for val, length in freq_list:
    # 每个连续块对应的就是从length递减到1的序列,直接拼进去就行
    run_list.extend(range(length, 0, -1))

print(run_list)  # 输出正好是你要的 [2, 1, 1, 3, 2, 1]

逻辑拆解

  1. 统计连续元素的长度:
    这部分你已经写了大半,核心就是遍历列表时,盯着当前元素current,统计它连续出现的次数count。一旦碰到不一样的元素,就把之前的统计结果存进freq_list,然后切换到新元素重新计数。最后一定要手动加一次最后一组,不然循环结束时最后一组还没存进去。

  2. 生成目标列表:
    拿到freq_list之后就简单了——比如某个元素连续出现了3次,那这三个位置对应的长度就是3、2、1;连续出现2次就是2、1。所以对每个元组,我们用range(length, 0, -1)生成递减序列,再用extend把这些序列拼起来,就得到最终的run_list了。

额外的边界处理

如果你的输入可能是空列表,记得先加个判断避免报错:

if not x_list:
    print([])
    # 或者直接返回空列表,根据你的需求来
    exit()

这样不管输入是啥情况,代码都能正常运行啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:32:19