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

Python字符串连续重复字符去重问题:itertools存CSV无效求最优解

解决连续重复字符去除及格式转换问题

需求明确

输入字符串:Tem1 = 'Hhelloo ookkee'
期望输出:Tem1 = 'helo oke'
核心要求:

  • 去除连续重复的字符(非全局去重,严格保留字符顺序)
  • 自动将所有字符转为小写

最优实现方案

方法1:利用itertools.groupby处理完整字符串

groupby是处理连续重复元素的高效工具,配合小写转换即可满足需求:

import itertools

def remove_consecutive_duplicates(s):
    # 先统一转小写,再按连续字符分组去重
    lower_s = s.lower()
    return ''.join(ch for ch, _ in itertools.groupby(lower_s))

# 测试验证
input_str = 'Hhelloo ookkee'
output_str = remove_consecutive_duplicates(input_str)
print(output_str)  # 输出: 'helo oke'

方法2:手动遍历实现(无第三方依赖)

如果不想导入库,手动遍历字符串也能高效完成:

def remove_consecutive_duplicates(s):
    if not s:
        return ""
    lower_s = s.lower()
    result = [lower_s[0]]
    for char in lower_s[1:]:
        if char != result[-1]:
            result.append(char)
    return ''.join(result)

# 测试验证
input_str = 'Hhelloo ookkee'
print(remove_consecutive_duplicates(input_str))  # 输出: 'helo oke'

针对你的代码问题修正

你的代码中,每次仅对单个字符(chr(tem1))调用groupby,这无法处理跨多次写入的连续重复字符(比如连续两次输出'h',单独处理每个'h'不会合并)。正确的做法是先收集所有字符到缓冲区,再统一处理后写入CSV:

import itertools
import cv2

# 初始化字符缓冲区,用于收集所有输出字符
char_buffer = []

# 原逻辑中的字符处理部分
tem1 = sum(val*(2**idx) for idx, val in enumerate(reversed(tem)))
if bit[0:8]==[1,0,0,1,1,0,0,1]:
    current_char = chr(tem1)
    cv2.putText(frame, f"Text Print: {current_char}.....", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    print(current_char)
    cv2.imshow('frame', frame)
    if current_char != '0':
        char_buffer.append(current_char.lower())  # 转小写后加入缓冲区

# 所有字符收集完成后,处理连续重复并写入CSV
if char_buffer:
    full_str = ''.join(char_buffer)
    cleaned_str = ''.join(ch for ch, _ in itertools.groupby(full_str))
    with open('output.csv', 'w') as f:
        f.write(cleaned_str)

关键说明

  • 本方案仅去除连续相邻的重复字符,完全保留原始字符的出现顺序,和全局去重逻辑有本质区别
  • 自动处理大小写转换,匹配你给出的输出格式要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:13:21