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

如何统计列表中数字出现次数并生成含次数与原数的新列表?

解决RLE编码函数的数值与次数配对问题

问题说明

需要实现encode_rle函数,接收列表flat_data,返回次数+对应数值交替排列的新列表。例如输入[15,15,15,6,6,6,7,7],输出应为[3,15,3,6,2,7]。

原代码的核心问题

  1. 元素顺序被打乱:使用set(flat_data)会将原列表转为无序集合,破坏了元素在原列表中的出现顺序,最终输出的数值顺序会和输入不一致。
  2. 次数与数值未配对:最后直接拼接数值列表和次数列表,导致所有数值在前、所有次数在后,完全不符合“次数+数值”交替的要求。

修正后的实现代码

def encode_rle(flat_data):
    if not flat_data:
        return []
    
    result = []
    current_num = flat_data[0]
    count = 1
    
    for num in flat_data[1:]:
        if num == current_num:
            count += 1
        else:
            result.append(count)
            result.append(current_num)
            current_num = num
            count = 1
    # 处理最后一组连续元素
    result.append(count)
    result.append(current_num)
    
    return result

代码解释

  • 先处理空列表的边界情况,避免索引错误;
  • 从列表第一个元素开始,跟踪当前连续出现的数字和对应的计数;
  • 遍历后续元素时,若和当前数字相同则计数累加,不同则将当前的计数和数字依次加入结果列表,再更新跟踪的数字和计数;
  • 遍历结束后,不要忘记把最后一组连续元素的计数和数字加入结果;
  • 最终得到的结果列表严格按照“次数、数值”交替的格式输出,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:28:21