为了账号安全,请及时绑定邮箱和手机立即绑定

填写开始/结束日期列表及其之间的日期

填写开始/结束日期列表及其之间的日期

慕尼黑的夜晚无繁华 2023-07-27 10:31:03
给定一个具有以下结构的列表:[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']]PS:列表的长度始终是偶数(因此没有结束就没有循环的开始)。
查看完整描述

4 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

您可以使用timedeltafrom datetimemodule 从开始日期到结束日期进行迭代,如下所示


from datetime import datetime as dt, timedelta as td

strp,strf,fmt=dt.strptime,dt.strftime,"%m-%d-%Y"


a=['10-23-2019', '10-26-2019' , '11-02-2019', '11-06-2019']


print([[strf(k,fmt) for k in (strp(i,fmt)+td(days=n) for n in range((strp(j,fmt)-strp(i,fmt)).days+1))] for i,j in zip(a[::2],a[1::2])])

输出


[['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']]



查看完整回答
反对 回复 2023-07-27
?
MYYA

TA贡献1868条经验 获得超4个赞

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


为了按照问题中的指定将输出生成为嵌套列表,临时变量dates_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)

这给出:


[['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']]

(为了可读性插入换行符)


查看完整回答
反对 回复 2023-07-27
?
函数式编程

TA贡献1807条经验 获得超9个赞

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


map(parse, lst)将日期从字符串转换为日期时间对象;zip(*[map(parse, lst)]*2)将创建成对的日期时间对象,以便您可以成对地导航它们(start,end)。最后rrule(freq=DAILY, dtstart=start, until=end)创建从开始到结束的一系列日期时间对象


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


查看完整回答
反对 回复 2023-07-27
?
跃然一笑

TA贡献1826条经验 获得超6个赞

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


前任:


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


查看完整回答
反对 回复 2023-07-27
  • 4 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信