Python如何将列表中连字符'-'前后的相邻元素拼接为单个字符串
连字符拆分姓名片段拼接方案
问题背景
使用命名实体识别(NER)模型提取姓名时,类似Jane Miller-Smith这类带连字符的姓名会被错误拆分为独立列表元素,示例输入:
names = ['Jane','Miller','-','Smith']
需要实现逻辑将连字符-前后的姓名片段拼接,最终得到按名、姓拆分的正确列表,同时保留其余元素原有顺序,避免位置错乱,期望输出:
['Jane', 'Miller-Smith']
原有基于zip遍历相邻元素的写法存在两个核心问题:一是遍历配对会丢失列表最后一个元素,二是遇到连字符时没有回溯修改已加入结果集的前序元素,也没有跳过已拼接的后续元素,很容易导致元素重复、顺序错乱。
简洁实现方案
采用索引逐位遍历的方式,遇到连字符时直接合并前后元素、跳过已处理位置即可,代码逻辑通用,可适配多段连字符的姓名场景:
def merge_hyphen_name(name_segments): res = [] idx = 0 length = len(name_segments) while idx < length: # 判定当前位置是姓名中间的连字符:前后都存在有效元素 if 0 < idx < length - 1 and name_segments[idx] == '-': # 取出前一个已经加入结果的片段,拼接连字符和后一个片段 prev_part = res.pop() merged_part = f"{prev_part}-{name_segments[idx+1]}" res.append(merged_part) # 跳过连字符本身和已经合并的后一个片段,索引前移2位 idx += 2 else: res.append(name_segments[idx]) idx += 1 return res
效果测试
# 测试1:单连字符姓氏场景 test1 = ['Jane', 'Miller', '-','Smith'] print(merge_hyphen_name(test1)) # 输出:['Jane', 'Miller-Smith'] # 测试2:连字符中间名+连字符姓氏场景 test2 = ['Jane', '-', 'Marie','Miller', '-','Smith'] print(merge_hyphen_name(test2)) # 输出:['Jane-Marie', 'Miller-Smith']
注:如果NER返回存在连续连字符、首尾为连字符的异常拆分结果,可以在判定连字符的逻辑中补充对应边界校验,常规姓名识别场景下上述逻辑可直接使用。
内容的提问来源于stack exchange,提问作者steca
相关产品推荐
相关产品推荐

