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

Python:将姓名按姓氏首字母顺序归入26个子列表

按姓氏首字母分组姓名列表的解决思路

步骤1:对姓名列表排序

如果只是按姓名整体字典序排序,直接用Python内置的sorted()函数即可;如果需要按姓氏优先排序(更贴合分组需求),可以自定义排序key,提取每个姓名的姓氏部分作为排序依据:

lst = ['Adam Sander', 'Brian Amnos', 'Alice Brown', 'Bob Smith']
# 按姓氏排序(假设姓名格式为"名 姓",取最后一段作为姓氏)
sorted_names = sorted(lst, key=lambda x: x.split()[-1])

步骤2:初始化分组主列表

直接创建包含26个空列表的主列表,对应A-Z每个字母的分组:

# 索引0对应A,1对应B……25对应Z
grouped_list = [[] for _ in range(26)]

步骤3:遍历排序后的姓名,完成分组

核心逻辑是提取姓氏首字母,转大写避免大小写差异,再计算该字母对应的主列表索引,将姓名加入对应子列表:

for name in sorted_names:
    # 提取姓氏
    last_name = name.split()[-1]
    # 取姓氏首字母并转大写
    initial = last_name[0].upper()
    # 计算索引:A对应0,B对应1……Z对应25
    index = ord(initial) - ord('A')
    # 过滤非英文字母的情况
    if 0 <= index <= 25:
        grouped_list[index].append(name)

额外处理:非英文字母姓氏的情况

如果列表中有姓氏首字母不是A-Z的姓名,可以单独新增一个"其他"分组:

# 前26个对应A-Z,最后一个是"其他"分组
grouped_list = [[] for _ in range(26)] + [[]]
for name in sorted_names:
    last_name = name.split()[-1]
    initial = last_name[0].upper()
    index = ord(initial) - ord('A')
    if 0 <= index <=25:
        grouped_list[index].append(name)
    else:
        grouped_list[26].append(name)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:06:27