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

时间:2018-04-04 19:45:29

标签: python-3.x python-datetime

我想使用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中使用循环,并且以下代码显示语法错误:

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)])

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

1 个答案:

答案 0 :(得分:1)

如果确实想要列表理解,那么就去吧!

让我们使用另一种方法。

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

此处右侧的数字是从1月1日开始的的数量。现在您可以计算从734869开始的天数并获取新日期:

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