Python一次性比较具有不同日期范围的日期

2024-07-04 08:51:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想一次比较一个日期和不同的日期集。看起来我现在的代码将每个日期与三个列表进行比较,并生成三个结果。通过这种方法,每天产生三种不同的结果。相反,我希望将每个日期一次性压缩到三个日期范围,并生成结果。
我现在的代码是

exp1= [dates_bwn_twodates('2019-03-22','2019-04-09'),onemod,'exp1']
exp2 = [dates_bwn_twodates('4/10/2019','4/29/2019'),sixmod,'exp2']
exp3 = [dates_bwn_twodates('4/30/2019','5/9/2019'),fourmod,'exp3']

exp_list = [exp1,exp2,exp3]
days_list = [2019-03-06, 2019-03-09, 2019-03-10,2019-04-07,2019-04-15]
for j in days_list:
    for k in explist:
        if k[0].isin([j]).any() == True:
            print(j, k[2])
        elif k[0].isin([j]).any() == False:
            print(j,"normal")

我目前的产出

.
.
2019-03-09  normal
2019-03-09  normal
2019-03-10  normal
2019-03-10  normal
2019-03-10  normal
2019-04-07  exp1
2019-04-07  normal
2019-04-07  normal
2019-04-15  normal
2019-04-15  exp2    
2019-04-15  normal
..

我的预期产出

2019-03-09  normal
2019-03-10  normal
2019-04-07  exp1
2019-04-15  exp2    ..

Tags: 代码inforanydayslistdatesprint
1条回答
网友
1楼 · 发布于 2024-07-04 08:51:14

您可以使用列表理解来识别exp_列表中的匹配项。使用next()函数,可以获得第一个匹配项,并在没有匹配项时使用其第二个参数指示默认值“normal”

下面是一个如何做到这一点的示例:

exp1 = ('2019-03-22','2019-04-09','exp1')
exp2 = ('2019-04-10','2019-04-19','exp2')
exp3 = ('2019-04-30','2019-05-09','exp3')

exp_list  = [exp1,exp2,exp3]
days_list = ["2019-03-06", "2019-03-09", "2019-03-10","2019-04-07","2019-04-15"]
for j in days_list:
    expr = next((expr for lo,hi,expr in exp_list if j>=lo and j<=hi),"normal")
    print(j,expr)

请注意,如果您使用的是字符串,则日期的格式必须全部为YYYY-MM-DD,这样比较才能正常工作。如果使用实际日期()值,则这不是问题

相关问题 更多 >

    热门问题