如何用Python实现am/pm格式12小时制时间按时间顺序正确排序
12小时制时间排序问题修正方案
原代码存在的问题
- 基础语法错误:循环条件中错误使用
len(last),你定义的输入时间列表名为lst,运行会直接抛出变量未定义报错 - 无排序逻辑:仅将12点的时间插入列表开头,其余时间按输入顺序追加,导致7:02am排在11:00am之后,不符合时间顺序要求
- 函数逻辑耦合严重:自定义的
lenght、ampm函数都依赖全局变量i,传参完全没有生效,代码可维护性极低
修正方案
通过给每个时间生成独立的排序权重实现需求,不需要手动处理插入位置,代码逻辑更简洁可靠:
# 读取输入 time_str = input("Please enter the boost times: ") time_list = time_str.split() def get_sort_key(time_item): # 拆分am/pm标记和时间部分 period = time_item[-2:] hour, minute = map(int, time_item[:-2].split(':')) # 按规则计算小时权重 if period == 'am': weight_hour = 0 if hour == 12 else hour else: weight_hour = 12 if hour == 12 else hour + 12 # 叠加分钟权重保证同小时内按分钟排序 return weight_hour + minute / 60 # 按权重全局排序 sorted_time = sorted(time_list, key=get_sort_key) # 拆分am、pm列表 lsta = [t for t in sorted_time if t.endswith('am')] lstp = [t for t in sorted_time if t.endswith('pm')] print(lsta, lstp)
测试效果
输入测试用例11:00am 12:59am 5:02pm 7:02am 8:00pm,输出结果为:['12:59am', '7:02am', '11:00am'] ['5:02pm', '8:00pm'],完全符合要求的排序规则。
内容的提问来源于stack exchange,提问作者user17284806
相关产品推荐
相关产品推荐

