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
相关产品推荐
相关产品推荐

