如何识别列表中的连续时间区间?附具体日期列表示例
检测日期列表中的连续月份区间
没问题,我来帮你搞定这个连续日期区间的检测需求!咱们可以用Python来实现这个功能,核心思路是把每个月份字符串转换成可计算的日期对象,然后逐个检查相邻月份是否连续,以此来分组。
实现步骤与代码
首先,我们需要用datetime模块处理日期,再借助dateutil.relativedelta来方便地计算下一个月份(如果你的环境没装python-dateutil,先运行pip install python-dateutil安装)。
from datetime import datetime from dateutil.relativedelta import relativedelta dates = ['2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12', '2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2020-01', '2020-03', '2020-04', '2020-05', '2020-09', '2020-10'] # 初始化结果列表和当前连续组 result = [] current_group = [dates[0]] # 从第二个元素开始遍历 for date_str in dates[1:]: # 把当前日期和组内最后一个日期转成datetime对象 current_date = datetime.strptime(date_str, '%Y-%m') last_date_in_group = datetime.strptime(current_group[-1], '%Y-%m') # 计算组内最后一个日期的下一个月 next_month = last_date_in_group + relativedelta(months=1) # 如果当前日期正好是下一个月,就加入当前组;否则结束当前组,开启新组 if current_date == next_month: current_group.append(date_str) else: result.append(current_group) current_group = [date_str] # 别忘了把最后一个组加入结果 result.append(current_group) # 打印结果 for interval in result: print(interval)
代码解释
- 日期转换:用
datetime.strptime把YYYY-MM格式的字符串转成日期对象,方便后续计算。 - 连续判断:用
relativedelta(months=1)计算上一个日期的下一个月,和当前日期对比,如果相等说明是连续月份。 - 分组逻辑:一开始把第一个日期作为初始组,之后每遇到不连续的月份,就把当前组存入结果,再新建一个组;遍历结束后要把最后一个组也加入结果。
运行结果
运行上面的代码,你会得到和你期望完全一致的结果:
['2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12'] ['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11'] ['2020-01'] ['2020-03', '2020-04', '2020-05'] ['2020-09', '2020-10']
内容的提问来源于stack exchange,提问作者Bisimwa Ro
相关产品推荐
相关产品推荐

