统计连续字符的高效实现方法:求现有代码的替代方案
连续字符统计的其他实现方法
针对你给出的字符统计需求(输入示例:33 P DDD AA 00 23),除了手动循环的实现方式,还有以下几种更简洁高效的替代方案:
方法一:使用itertools.groupby
Python标准库的itertools.groupby专门用于分组连续重复的元素,代码可读性和简洁性都很强:
from itertools import groupby def count_consecutive_chars(t, translate_dict): result = [] for char, group in groupby(t): count = len(list(group)) translated = translate_dict.get(char, char) result.append(f"{translated}{count}") return ''.join(result)
方法二:使用正则表达式
利用正则匹配连续重复的字符,再通过替换函数完成转换和计数:
import re def count_consecutive_chars(t, translate_dict): def process_match(match): char = match.group()[0] translated = translate_dict.get(char, char) return f"{translated}{len(match.group())}" return re.sub(r'(.)\1*', process_match, t)
方法三:简化版单循环实现
在你原有逻辑基础上简化,用单循环替代嵌套while,可读性更好:
def count_consecutive_chars(t, translate_dict): if not t: return "" result = [] current_char = t[0] counter = 1 for char in t[1:]: if char == current_char: counter += 1 else: result.append(f"{translate_dict.get(current_char, current_char)}{counter}") current_char = char counter = 1 # 处理最后一组字符 result.append(f"{translate_dict.get(current_char, current_char)}{counter}") return ''.join(result)
以上方法都能实现和你现有代码一致的功能,其中itertools.groupby是最贴合Python风格的选择,正则表达式则适合偏好模式匹配的场景。
内容的提问来源于stack exchange,提问作者Samuele1818
相关产品推荐
相关产品推荐

