Python 用介于两者之间的日期填写开始/结束日期列表

Python 用介于两者之间的日期填写开始/结束日期列表,python,datetime,Python,Datetime,给定具有以下结构的列表: [start_date_cycle1, end_date_cycle1, start_date_cycle2, end_date_cycle2, ..., end_date_cycleK] 在所有元素都是时间戳的情况下,我想得到以下信息 [[start_date_cycle1, start_date_cycle1 +1d, start_date_cycle1 +2d, ..., end_date_cycle1], [start_date_cycle2, start_

给定具有以下结构的列表:

[start_date_cycle1, end_date_cycle1, start_date_cycle2, end_date_cycle2, ..., end_date_cycleK] 
在所有元素都是时间戳的情况下,我想得到以下信息

[[start_date_cycle1, start_date_cycle1 +1d, start_date_cycle1 +2d, ..., end_date_cycle1],
[start_date_cycle2, start_date_cycle2 +1d ...]] 
因此,如果输入为
['10-23-2019'、'10-26-2019'、'11-02-2019'、'11-06-2019']
,则输出为:

[['10-23-2019', '10-24-2019','10-25-2019', '10-26-2019'] ,
 ['11-02-2019', '11-03-2019','11-04-2019','11-05-2019','11-06-2019']]

备注:列表的长度将始终为偶数(因此没有循环的开始就没有结束)。

这是使用
datetime
模块的一种方法

Ex:

import datetime

data = ['10-23-2019', '10-26-2019' , '11-02-2019', '11-06-2019']
result = []
for s, e in zip(data[::2], data[1::2]):          # (10-23-2019, 10-26-2019)....
    s = datetime.datetime.strptime(s, "%m-%d-%Y")
    e = datetime.datetime.strptime(e, "%m-%d-%Y")
    temp = []
    while s <= e:
        temp.append(s.strftime("%m-%d-%Y"))
        s += datetime.timedelta(days=1)
    if temp:
        result.append(temp)
print(result)
[['10-23-2019', '10-24-2019', '10-25-2019', '10-26-2019'],
 ['11-02-2019', '11-03-2019', '11-04-2019', '11-05-2019', '11-06-2019']]

您可以将字符串解析为
datetime
对象,使用它们进行必要的计算(通过添加
timedelta
对象),然后在末尾转换回字符串

要以嵌套列表的形式生成输出,如问题中所述,临时变量
dates\u out
用于生成内部列表,这些列表附加到循环内的主列表(
out

如果要使用日-月-年排序,请将
'%m-%d-%Y'
更改为
'%d-%m-%Y'

import datetime

dates = ['10-23-2019', '10-26-2019' , '11-02-2019', '11-06-2019']
format = '%m-%d-%Y'

dts = [datetime.datetime.strptime(date, format) for date in dates]

out = []
i = iter(dts)
for start, end in zip(i, i):
    dt = start
    dates_out = []
    while dt <= end:
        dates_out.append(datetime.datetime.strftime(dt, format))
        dt += datetime.timedelta(days=1)
    out.append(dates_out)

print(out)

(为便于阅读而插入换行符)

您可以使用
dateutil
模块轻松完成此操作。您可以通过执行
pip install python dateutil
来安装它

map(parse,lst)
将日期从字符串转换为datetime obj
zip(*[map(parse,lst)]*2)
将创建日期时间对象对,以便您可以将它们作为
(开始,结束)
对进行导航。最后,
rrule(freq=DAILY,dtstart=start,till=end)
从开始到结束创建一个datetime对象范围

>>> from dateutil.rrule import rrule, DAILY
>>> from dateutil.parser import parse
>>> 
>>> lst = ['10-23-2019', '10-26-2019' , '11-02-2019', '11-06-2019']
>>> res = [[dt.strftime('%m-%d-%Y') for dt in rrule(freq=DAILY, dtstart=start, until=end)] for start,end in  zip(*[map(parse, lst)]*2)]
>>> 
>>> print(res)
[['10-23-2019', '10-24-2019', '10-25-2019', '10-26-2019'],
 ['11-02-2019', '11-03-2019', '11-04-2019', '11-05-2019', '11-06-2019']]

您可以使用
timedelta
from
datetime
模块从开始日期到结束日期进行迭代,如下所示

从datetime导入datetime作为dt,timedelta作为td
strp,strf,fmt=dt.strptime,dt.strftime,“%m-%d-%Y”
a=['10-23-2019','10-26-2019','11-02-2019','11-06-2019']
在zip(a[::2],a[1::2])中打印[strf(k,fmt)表示k in(strp(i,fmt)+td(days=n)表示n范围内的n((strp(j,fmt)-strp(i,fmt)).days+1))]
输出

[['10-23-2019', '10-24-2019', '10-25-2019', '10-26-2019'], ['11-02-2019', '11-03-2019', '11-04-2019', '11-05-2019', '11-06-2019']]

您尝试了什么?请重新执行,阅读并提供。“为我实现此功能”是本网站的主题。你必须做出诚实的尝试,然后问一个关于你的算法或技术的具体问题。
[['10-23-2019', '10-24-2019', '10-25-2019', '10-26-2019'], ['11-02-2019', '11-03-2019', '11-04-2019', '11-05-2019', '11-06-2019']]