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()
)
]
我想在 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()
)
]