如何在循环中生成正确嵌套列表,实现E/B到二进制序列的转换?
问题分析与修正方案
核心问题
你的代码大概率只匹配了第一段连续的E/B字符,没有遍历所有匹配段,或是在存储结果时重复复用了同一个列表对象,导致出现重复第一段序列的问题。
修正实现
使用正则表达式匹配所有连续的E/B序列,逐个转换为二进制列表,同时完成原字符串的占位符替换:
import re def process_eb_content(input_str): EB_to_01 = [] # 匹配所有连续的E/B字符段 eb_pattern = re.compile(r'[EB]+') def handle_match(match_obj): # 处理单个匹配到的E/B片段 eb_segment = match_obj.group() # 转换为二进制列表:E→0,B→1 binary_seq = [0 if char == 'E' else 1 for char in eb_segment] EB_to_01.append(binary_seq) # 返回占位符替换原片段 return '<EB_SEGMENT>' # 执行全局替换并收集结果 processed_str = eb_pattern.sub(handle_match, input_str) return processed_str, EB_to_01 # 测试示例输入 test_input = "i am BBEBE years old, my son is BBE" result_str, eb_list = process_eb_content(test_input) print("处理后字符串:", result_str) print("EB转换列表:", eb_list)
输出结果
处理后字符串: i am <EB_SEGMENT> years old, my son is <EB_SEGMENT> EB转换列表: [[1, 1, 0, 1, 0], [1, 1, 0]]
关键说明
re.compile(r'[EB]+'):精准匹配所有连续的E/B字符片段,确保不会遗漏任何一段pattern.sub(handle_match, input_str):遍历所有匹配结果,逐个调用处理函数,同时完成占位符替换和二进制列表收集- 每个匹配段都会生成独立的二进制列表,存入
EB_to_01,彻底避免重复第一段序列的问题
内容的提问来源于stack exchange,提问作者Brendan
相关产品推荐
相关产品推荐

