python - 在 Python 中,如何在排序的日期列表中查找特定日期之间的位置?

标签 python sorting date binary-search

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

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

是否有预制的二分搜索等我可以使用?还是我必须自己写?

最佳答案

您可以使用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

关于python - 在 Python 中,如何在排序的日期列表中查找特定日期之间的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28863676/

相关文章:

Python:如何在创建时向父类注册所有子类

python - 在 Mapnik 中渲染我的 map

php - 如何在 Laravel 5.1 中按多列对 Illuminate Collection 进行排序?

javascript - 循环之前的数组排序不保持数组排序

r - 为订阅之间的间隙添加空行

python - 使用 tf.io.decode_jpeg 导入后出现 TypeError : Image data cannot be converted to float with plt. imshow

python - 如何返回 django 中的调用 View ?

sorting - 如何使用默认排序函数对golang中的整数数组进行排序

javascript - 如何在javascript中将字符串解析为特定的日期格式

java - 将Java SQL日期从yyyy-MM-dd转换为dd MMMM yyyy格式的最佳方法