You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找列表中最后一个小于指定比较日期的datetime.date对象的索引

方案1:列表为升序排列时(你的示例符合该场景)

直接用Python标准库bisect模块实现,代码极简且时间复杂度为O(logn),列表元素越多性能优势越明显:

import datetime
import bisect

dates = [datetime.date(2020, 2, 1),
         datetime.date(2021, 2, 1),
         datetime.date(2022, 2, 1),
         datetime.date(2023, 2, 1),
         datetime.date(2024, 2, 1),
         datetime.date(2025, 2, 1)]
comparison_date = datetime.date(2022, 11, 5)

# 找到比较日期的插入位置,减1即为最后一个小于比较日期的元素索引
last_index = bisect.bisect_left(dates, comparison_date) - 1
print(last_index)

运行结果为2,符合你的需求。如果返回值为-1说明列表中没有早于比较日期的元素。


方案2:列表为无序排列时

逆序遍历找到第一个符合条件的元素直接返回,不需要存储所有符合条件的索引,比你原方案更省内存、遍历耗时更短:

import datetime

dates = [datetime.date(2020, 2, 1),
         datetime.date(2021, 2, 1),
         datetime.date(2022, 2, 1),
         datetime.date(2023, 2, 1),
         datetime.date(2024, 2, 1),
         datetime.date(2025, 2, 1)]
comparison_date = datetime.date(2022, 11, 5)

last_index = -1
for idx, date in enumerate(reversed(dates)):
    if date < comparison_date:
        last_index = len(dates) - 1 - idx
        break
print(last_index)

内容的提问来源于stack exchange,提问作者quadratecode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:54:04