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

Python如何将姓名列表转换为首字母缩写 现有代码求排错

问题描述

现有姓名列表,列表内姓名格式为['Surname, Name'](逗号前为姓,逗号后为名),需要将所有姓名转换为仅含首字母的缩写,输出规则为名首字母在前、姓首字母在后,例如占位示例Surname, Name需输出NS。
当前编写的实现代码如下:

list_names = [['Johnson, Sarah'],['Hill, Becky'],['Smith, John']]
for name in list_names:
    for name_string in name:
        split = name_string.split(", ")
        join = " ".join(split)
        initials = ""
        for n in split:
            initials += n[0].upper()
            print(initials)

补充说明:代码拼写错误已修正,原始姓名数据存储在numpy.ndarray结构中,已转换为名为list_names的列表。

问题原因
  • 打印逻辑错误:print(initials)写在遍历拆分结果的循环内部,每拼接一个首字母就会输出一次中间值,单个姓名会产生多行输出,无法得到最终完整缩写
  • 首字母顺序错误:字符串按, 拆分后得到的列表第一个元素是姓、第二个元素是名,直接按拆分顺序拼接会得到「姓首字母+名首字母」的结果,和要求的顺序相反
  • 存在冗余代码:定义的join = " ".join(split)变量未被后续逻辑使用,属于无效代码
修正方案

保留原有嵌套循环的易读版本,直接调整顺序和打印位置即可:

list_names = [['Johnson, Sarah'],['Hill, Becky'],['Smith, John']]
for name in list_names:
    for name_string in name:
        # 拆分时直接接收姓和名两个变量
        surname, first_name = name_string.split(", ")
        # 按「名首字母+姓首字母」的顺序拼接,统一转大写
        initials = first_name[0].upper() + surname[0].upper()
        print(initials)

运行后输出结果为:

SJ
BH
JS

如果需要批量收集所有结果,可以新增一个结果列表存储,也可以用列表推导式简化写法:

list_names = [['Johnson, Sarah'],['Hill, Becky'],['Smith, John']]
initials_result = [fn[0].upper() + sn[0].upper() for sn, fn in [item[0].split(", ") for item in list_names]]
print(initials_result) # 输出 ['SJ', 'BH', 'JS']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:33:34