python 中的嵌套理解以生成年份日期

nested comprehension in python to generate date of years

我想在 Python3.x

中使用理解打印 2013 年到 2018 年的所有日期

下面的代码可以很好地打印 2013 年到 2018 年的日期,但仅适用于接下来的月份 [1,3,5,7,8,10,12]:

print([datetime.date(i,j,k).strftime('%d %b %Y')  for i in range(2013,2019)
                                                    for j in range(1,13)
                                                      if j in {1,3,5,7,8,10,12} 
                                                         for k in range(1,32)])

但是剩下的几个月需要在 elif 中多一个 for 循环,下面的代码显示语法错误:

print([datetime.date(i,j,k).strftime('%d %b %Y')  for i in range(2013,2019)
                                                    for j in range(1,13)
                                                      if j in {1,3,5,7,8,10,12} 
                                                         for k in range(1,32)
                                                      elif j in {4,6,9,11}
                                                         for k in range(1,31)    
                                                      else
                                                         for k in range(1,29)])

如果有人能以同样的理解添加闰年的代码,我会很高兴。

如果您真的想要列表理解,那么给您!

让我们使用另一种方法。

datetime.date(2013, 1, 1).toordinal() == 734869
datetime.date(2019, 1, 1).toordinal() == 737060

这里右边的数字是从第 1 年 1 月 1 日起经过的 的天数。现在您可以从 734869 开始计算天数并获得新日期:

dates = [
    datetime.date.fromordinal(ordinal)
    for ordinal in range(
        datetime.date(2013, 1, 1).toordinal(),
        datetime.date(2019, 1, 1).toordinal()
    )
]