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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:24:24