![](/img/trans.png)
[英]Is there a quick way for checking whether a date lies within n days(say 7) from a list of dates
[英]Quick way of matching date range to indices in Python list of dates
我需要選擇最早日期的索引,該索引不超過date1
之前的interval
天(索引為i1
)。 我有一個排序的列表dates
,這是我要執行的操作的摘要:
for i1 in mylist:
date1 = dates[i1]
i0 = sum(1 for d in dates if date1 - d > timedelta(days = interval))
# do some other stuff with this
我找到i0
的那一行似乎是該循環的瓶頸,因為如果我將其更改為i0 = max(0, i1 - 30)
(它只是忽略丟失的日期),它的運行速度將提高大約100倍。
有沒有辦法加快速度? 我覺得應該有一種利用列表已排序的事實的方式,並避免進行所有比較。
PS:我的第一次嘗試是:
i0 = len([d for d in dates if date1 - d > timedelta(days = interval)])
這甚至更慢。
我需要選擇最早日期的索引,該索引不超過date1之前的
interval
天(索引為i1
)。 我有一個列表dates
排序
使用二進制搜索( O(log n)
時間復雜度):
import bisect
i = bisect.bisect_left(dates, dates[i1]-timedelta(days=interval))
解釋bisect
的文檔 :返回值i
使得切片dates[:i]
中的所有日期都大於 date[i1]
之前的( >
)個interval
天,而切片dates[i:]
中的所有日期都小於大於或等於 dates[i1]
之前的interval
天( <=
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.