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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:05