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

如何识别数组中随机顺序的姓名并按指定格式输出名与姓氏

解决姓名匹配问题:识别名字并对应姓氏

给定两个数组:

  • datos:里面是顺序随机的姓名,有的是名在前姓在后,有的是姓在前名在后,还有的是两个名字对应一个姓氏
    datos = ['Lucas Martinez', 'Gonzalez Carmen', 'Garcia Sofia', 'Cristian Ines Perez', 'Jorge Rodriguez']
    
  • nombres:纯名字的列表
    nombres = ['Sofia', 'Lucas', 'Cristian', 'Jorge', 'Ines', 'Carmen']
    

需要把每个名字和对应的姓氏配对,输出"名字 姓氏"的格式,比如:
Lucas Martinez
Carmen Gonzalez
遇到多个名字共用一个姓氏的情况,要拆成两条输出,比如:
Cristian Perez
Ines Perez

你之前的代码只能处理名在前的情况,这里给你一个能覆盖所有场景的解决方案:

完整代码

datos = ['Lucas Martinez', 'Gonzalez Carmen', 'Garcia Sofia', 'Cristian Ines Perez', 'Jorge Rodriguez']
nombres = ['Sofia', 'Lucas', 'Cristian', 'Jorge', 'Ines', 'Carmen']

# 把名字列表转成集合,查找效率比列表高很多
name_set = set(nombres)

def match_names_and_last_names(data, names):
    result = []
    for full_name in data:
        # 把完整姓名拆成单个词
        words = full_name.split()
        # 找出当前这条里所有属于名字的词
        found_names = [word for word in words if word in names]
        # 剩下的词就是姓氏,拼起来(支持多词姓氏,比如"De la Cruz")
        last_name = ' '.join([word for word in words if word not in names])
        # 每个名字对应姓氏,生成目标格式的字符串
        for name in found_names:
            result.append(f"{name} {last_name}")
    return result

# 执行函数并打印结果
for entry in match_names_and_last_names(datos, name_set):
    print(entry)

代码说明

  1. 集合优化查找:用集合存名字,是因为集合判断元素是否存在的速度比列表快得多,数据量大的时候优势更明显。
  2. 拆分与筛选:把每个姓名拆成单个词后,分别筛选出名字和姓氏部分,不管名字在哪个位置都能找到。
  3. 兼容多词姓氏:如果遇到像"De la Cruz Maria"这种多词姓氏的情况,代码也能正确把"De la Cruz"作为姓氏配对给名字Maria。
  4. 处理多名字场景:一条姓名里有多个名字时,每个名字都会和同一个姓氏配对,生成独立的条目。

运行结果

运行代码后会输出:

Lucas Martinez
Carmen Gonzalez
Sofia Garcia
Cristian Perez
Ines Perez
Jorge Rodriguez

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:02:09