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

Python如何提取字符串/列表的连续重复元素计数序列模式

问题解答

Python标准库中存在直接适配该需求的内置工具:itertools.groupby,它的核心作用就是将可迭代对象中连续相等的元素聚合为分组,不需要手动维护遍历索引、前序元素、计数器等状态,就能实现你要的连续重复元素编码效果。

用法示例

你可以用几行代码实现比朴素版本适配性更强的转换逻辑:

from itertools import groupby

def run_length_encode(seq):
    output_parts = []
    for value, group_iter in groupby(seq):
        # 统计当前连续分组的元素个数
        repeat_count = len(list(group_iter))
        output_parts.append(f"{repeat_count}{value}")
    return "".join(output_parts)

# 测试给定样例
print(run_length_encode("aaa bb"))
# 输出: 3a1 2b
print(run_length_encode(['blah', 'blah', 'yo', 'yo', 'yo']))
# 输出: 2blah3yo

对比朴素实现的优势

  • 适配范围更广:支持所有可迭代对象,包括无法通过下标索引取值的生成器、字节流、文件行迭代器等连续元素流场景,不需要依赖len()和下标遍历。
  • 边界逻辑更可靠:不需要手动处理遍历起始、末尾拼接的边界逻辑,也不会出现原朴素实现里定义了start、prev冗余变量却未使用的问题。
  • 注意不要和collections.Counter混淆:Counter是统计全量元素的总出现次数,会打乱原序列顺序,不匹配连续重复统计的需求;groupby仅聚合相邻的相同元素,完全符合场景要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:03:27