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
相关产品推荐
相关产品推荐

