Python使用插入排序按出生日期排序后输出完整人员信息实现问题
代码调整方案
核心问题
原有代码仅将年龄单独存入列表,丢失了年龄和人员姓名的对应关系,同时原有插入排序函数存在缩进错误,且定义后未主动调用,导致排序逻辑实际未生效。
调整后的完整代码
import datetime profile = ( ('Joe', 'Clark', '1989-11-20'), ('Charlie', 'Babbitt', '1988-11-20'), ('Frank', 'Abagnale', '2002-11-20'), ('Bill', 'Clark', '2009-11-20'), ('Alan', 'Clark', '1925-11-20'), ) # 存储结构改为[名, 姓, 年龄]的列表,保留完整关联信息 person_list = [] # 将当前时间提取到循环外,避免重复计算提高效率 today_date = datetime.datetime.now() for prof in profile: first_name, last_name, birth_date = prof datem = datetime.datetime.strptime(birth_date, "%Y-%m-%d") time_diff = today_date - datem age = time_diff.days // 365 person_list.append([first_name, last_name, age]) def insertionsort(person_list): # 排序时按第三个元素(年龄,索引为2)比较 for him in range(1, len(person_list)): call = him - 1 while call >= 0 and person_list[call][2] > person_list[call + 1][2]: person_list[call], person_list[call + 1] = person_list[call + 1], person_list[call] call -= 1 # 主动调用排序函数 insertionsort(person_list) print("") print("\t\t\t\t\t\t\t\t\t\t---Insertion Sort---") # 按要求格式对齐输出 print("Sorted Array of Age: ", person_list[0]) for item in person_list[1:]: print(f" {item}")
关键改动点
- 存储结构调整:将原来仅存年龄的
age_list改为存储[名, 姓, 年龄]的列表,保留数据关联关系 - 排序逻辑调整:插入排序比较时取每个元素索引为2的年龄值作为排序依据,同时修正了原有代码的缩进错误
- 补充排序调用:原有代码仅定义了插入排序函数,没有执行调用,新增了调用逻辑
- 输出格式调整:第一行输出和前缀对齐,后续行补对应空格实现格式对齐
内容的提问来源于stack exchange,提问作者Hydroxy21
相关产品推荐
相关产品推荐

