我有一个日期排序列表,我正在寻找一种方法来查找输入日期在该排序列表中的位置,更具体地说,是它的上限。
例如,如果在排序的日期列表中其位置为[0, 1, 2, 3, 4, 5]
,然后输入日期在位置3和4之间,则我希望该函数将位置4返回给我。
是否有预制的二进制搜索等可以用于此目的?还是我必须自己写?
您可以使用bisect.bisect_left()
或bisect.bisect_right()
(别名为bisect.bisect()
)找到该插入点。它将使用二进制搜索最多在日志N个步骤中找到该点。
不同之处在于当您给date()
列表中的a本身时会发生什么。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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句