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

Python3.x使用嵌套推导式生成2013-2018完整日期的问题

解决Python列表推导式生成2013-2018所有日期的问题

嘿,我明白你的困扰了!你原来的代码只处理了31天的大月,想加其他月份的循环却碰到语法错误——这是因为列表推导式的语法里,没办法直接在循环部分用elif,得换个思路来处理不同月份的天数差异。

核心问题分析

列表推导式的结构是[表达式 for 循环1 for 循环2 if 条件...],这里的if只是用来过滤元素的,没法实现多分支的逻辑判断。要处理不同月份的天数(包括二月的闰年情况),我们可以在生成day的范围时,用三元表达式来动态确定每个月的最大天数。

完整解决方案代码

import datetime

# 辅助函数:判断闰年
def is_leap(year):
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

# 用列表推导式生成所有日期
all_dates = [
    datetime.date(year, month, day).strftime('%d %b %Y')
    for year in range(2013, 2019)
    for month in range(1, 13)
    for day in range(1, 
        # 大月(31天)
        32 if month in {1, 3, 5, 7, 8, 10, 12} else
        # 小月(30天)
        31 if month in {4, 6, 9, 11} else
        # 二月:闰年29天,平年28天
        29 if is_leap(year) else 28
    )
]

# 可以打印前几个验证结果
print(all_dates[:10])

代码说明

  1. 闰年判断函数:is_leap函数按照公历闰年规则判断年份,确保二月的天数正确(闰年29天,平年28天)。
  2. 动态天数范围:在生成day的range时,用嵌套的三元表达式依次判断:
    • 先识别31天的大月,生成1-31的天数;
    • 再识别30天的小月,生成1-30的天数;
    • 最后处理二月,根据闰年情况生成对应天数范围。
  3. 格式输出:用strftime('%d %b %Y')把日期转换成你需要的格式(比如01 Jan 2013)。

这样就能一次性生成2013到2018年的所有有效日期,不会漏掉任何月份,也不会出现像4月31号这种不存在的日期错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:50:32