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

Python算法实现:从混合姓名列表中提取完整姓名

解决混合姓名列表的完整姓名提取问题

没问题,我来帮你实现这个符合要求的Python算法!先明确下需求的核心:我们要从混合了单个名/姓和完整姓名的列表里,最终输出包含所有单个名/姓的完整姓名,如果某个单个名/姓找不到对应的完整姓名,就保留它本身,同时要避免重复条目。

实现思路

  1. 先把输入列表拆成两类:带空格的完整姓名,和不带空格的单个姓名(先去重,避免重复处理同一个名字)。
  2. 为每个单个姓名匹配所有包含它的完整姓名(不管是作为名还是姓)。
  3. 构建结果集:把匹配到的完整姓名加进去,没有匹配的单个姓名直接保留。
  4. 最后去重,保证结果里没有重复条目。

完整代码实现

def extract_full_names(name_list):
    # 预处理:拆分完整姓名和单个姓名,同时清理前后空格、去重单个姓名
    full_names = [name.strip() for name in name_list if ' ' in name.strip()]
    single_names = list({name.strip() for name in name_list if ' ' not in name.strip()})
    
    # 建立单个姓名到对应完整姓名的映射
    name_mapping = {}
    for single_name in single_names:
        matching_full_names = []
        for full_name in full_names:
            # 检查单个姓名是否是完整姓名的组成部分(名或姓)
            name_parts = full_name.split()
            if single_name in name_parts:
                matching_full_names.append(full_name)
        name_mapping[single_name] = matching_full_names
    
    # 组装最终结果
    result = []
    for single, matches in name_mapping.items():
        if matches:
            # 有匹配的完整姓名,加入结果
            result.extend(matches)
        else:
            # 没有匹配,保留单个姓名
            result.append(single)
    
    # 去重并保留首次出现的顺序(Python 3.7+ 支持字典有序)
    result = list(dict.fromkeys(result))
    return result

# 测试示例列表
sample_list = ['John May', ' May', 'John', 'John Smith','Jack', 'John','May Smith', 'Sandra', 'Tim John','Simon', 'Tim Sandra', 'Sandra Smith']
print(extract_full_names(sample_list))

代码说明

  • 预处理步骤:用strip()清理掉姓名前后的空格(比如示例里的' May'会变成'May'),避免因为空格导致匹配失败;单个姓名用集合去重,避免重复处理同一个名字。
  • 匹配逻辑:遍历每个单个姓名,检查它是否出现在某个完整姓名的拆分部分里(不管是名还是姓),把所有匹配的完整姓名收集起来。
  • 结果组装:对于每个单个姓名,有匹配就加完整姓名,没有就保留原单个姓名;最后用dict.fromkeys()去重,同时保持元素第一次出现的顺序。

测试输出

运行上面的代码,你会得到:

['John May', 'May Smith', 'John Smith', 'Tim John', 'Jack', 'Tim Sandra', 'Sandra Smith', 'Simon']

完全符合规则:所有单个名/姓都找到了对应的完整姓名,Jack和Simon没有匹配到完整姓名,所以被保留下来,并且没有重复条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:00:33