【问题标题】:How to find in a sorted list of dates where a specific date lies in between, in Python?如何在Python中查找特定日期之间的日期排序列表?
【发布时间】:2015-03-04 19:57:10
【问题描述】:

我有一个排序的日期列表,我正在寻找一种方法来查找输入日期在该排序列表中的位置,更具体地说是它的上限。

例如如果在排序日期列表中定位其[0, 1, 2, 3, 4, 5],然后输入日期在位置 3 和 4 之间,我希望函数将位置 4 返回给我。

我可以使用预制的二进制搜索等吗?还是我自己写?

【问题讨论】:

    标签: python sorting date binary-search


    【解决方案1】:

    您可以使用bisect.bisect_left()bisect.bisect_right()(别名为bisect.bisect())来查找该插入点。它会在最多 log N 步中找到该点,使用二进制搜索。

    不同之处在于当你给它一个列表本身的date() 时会发生什么; bisect_left() 将给出相等值本身的索引,bisect_right() 给出紧随其后的索引。

    演示:

    >>> import bisect
    >>> list_of_dates = [
    ...     date(2015, 1, 15), date(2015, 2, 1), date(2015, 3, 31), 
    ...     date(2015, 4, 25), date(2015, 5, 23), date(2015, 6, 11)]
    >>> bisect.bisect(list_of_dates, date(2015, 4, 30))
    4
    >>> bisect.bisect(list_of_dates, date(2015, 4, 25))
    4
    >>> bisect.bisect_left(list_of_dates, date(2015, 4, 25))
    3
    

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      相关资源
      最近更新 更多