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

如何对5个格式为‘january 1’的输入日期按时间顺序排序?

解决日期排序问题:同时处理月份与日期排序

你的代码目前只实现了月份的提取排序,但没有将月份和对应的日期绑定,导致排序后月份与原日期脱节,而且完全无法处理同月份内的日期排序。另外代码重复冗余,每个生日都单独写判断逻辑,既低效又容易出错。

改进思路

把每个输入的生日转换成(月份数字, 日期数字)的元组——Python中元组会按元素顺序自动排序:先比较第一个元素(月份),月份相同时再比较第二个元素(日期)。将所有生日元组存入列表后直接排序,就能实现完整的时间顺序排序。

优化后的代码

# 定义月份列表,索引对应月份数字(索引0=1月,+1即实际月份)
months = ['january', 'february', 'march', 'april', 'may', 'june',
          'july', 'august', 'september', 'october', 'november', 'december']

birthdays = []
# 循环接收5个输入,避免重复代码
for i in range(5):
    date_input = input(f'birthday {i+1}: ')
    month_name, day_str = date_input.split()
    # 转换月份为数字、日期为整数
    month_num = months.index(month_name)
    day_num = int(day_str)
    # 存入元组(月份数字, 日期数字, 原输入),方便后续输出
    birthdays.append( (month_num, day_num, date_input) )

# 对列表排序:先按月份,再按日期
birthdays.sort()

# 输出排序结果
print("排序后的生日:")
for idx, (month_num, day_num, original) in enumerate(birthdays, 1):
    # 两种输出方式可选:显示数字月份+日期,或原格式
    print(f"{idx}. 月份: {month_num+1}, 日期: {day_num}")
    # print(f"{idx}. {original}")  # 直接输出原输入格式,比如"january 1"

核心逻辑说明

  1. 循环接收输入:用for循环替代重复的5次input,代码更简洁易维护。
  2. 绑定月份与日期:将每个生日的月份数字、日期数字打包成元组,排序时元组会自动遵循「先月后日」的规则。
  3. 排序后输出:遍历排序后的列表,直接得到时间顺序的结果,不会出现月份与日期不匹配的问题。

测试示例

如果输入:

birthday 1: march 15
birthday 2: january 20
birthday 3: march 5
birthday 4: february 28
birthday 5: january 10

排序后输出:

排序后的生日:
1. 月份: 1, 日期: 10
2. 月份: 1, 日期: 20
3. 月份: 2, 日期: 28
4. 月份: 3, 日期: 5
5. 月份: 3, 日期: 15

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:35:21