簡體   English   中英

將日期范圍與Python日期列表中的索引匹配的快速方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM