Python如何基于指定天数N生成连续日期列表
问题背景
以下代码原本通过列表推导式生成起止日期上下界范围内的所有日期:
from datetime import date, timedelta d1 = date(2022,1,1) d2 = date(2022,12,31) dates = [d1 + timedelta(days=x) for x in range((d2-d1).days + 1)]
上述实现需要明确指定结束日期d2,现在需要调整为直接指定需要生成的天数n来生成日期序列,初始参考代码如下:
from datetime import date, timedelta d1 = date(2022,1,1) n = 3 dates = []
期望得到的dates列表内容为:
2022-01-01 2022-01-02 2022-01-03
解决方案
直接修改列表推导式的迭代范围即可,不需要额外写循环逐次追加元素。
原来的逻辑里range((d2-d1).days + 1)本质是生成从0到「首尾日期天数差」的整数序列,对应每个日期相对于起始日的偏移天数。现在已知要生成n个日期,直接把迭代范围换成range(n)就行——range(n)会生成0、1、2…n-1共n个整数,刚好对应从起始日开始偏移0天到n-1天,总共n个连续日期,完全匹配预期结果。
完整实现代码:
from datetime import date, timedelta d1 = date(2022,1,1) n = 3 dates = [d1 + timedelta(days=x) for x in range(n)]
运行后逐行打印dates内的元素,输出结果和预期完全一致:
2022-01-01 2022-01-02 2022-01-03
补充说明:如果业务需求是从起始日的次日开始计算n天,只需要把迭代范围调整为range(1, n+1)即可。
内容的提问来源于stack exchange,提问作者DanielBell99
相关产品推荐
相关产品推荐

