python中日期时间列表的索引估计
因此,我有一个函数,它接受以下内容:python中日期时间列表的索引估计,python,function,datetime,Python,Function,Datetime,因此,我有一个函数,它接受以下内容:times=日期时间对象列表,start=日期时间对象,end=日期时间对象。并返回介于开始和结束之间的datetime对象的列表 def func(times,start,end): return times[start:end],(times.index(start),times.index(end)) 如果开始和/或结束实际上不在datetime对象列表中,我需要它仍能工作:时间 因此,如果start不在列表中,它将采用第一个“大于”start
times
=日期时间对象列表,start
=日期时间对象,end
=日期时间对象。并返回介于开始和结束之间的datetime对象的列表
def func(times,start,end):
return times[start:end],(times.index(start),times.index(end))
如果开始
和/或结束
实际上不在datetime对象列表中,我需要它仍能工作:时间
因此,如果start
不在列表中,它将采用第一个“大于”start
的项目,如果end
不在列表中,它也会这样做,只是它将改为“小于”
我得到实际起点和终点的指数也是至关重要的
我应该在函数中添加什么来实现这一点呢?您可以使用对分
import bisect
def func(times, start, end):
bucket = [start, end]
out = [x for x in times if bisect.bisect(bucket, x) is 1 or x in bucket]
return out, (times.index(out[0]), times.index(out[-1]))
对于这个问题,一种天真的方法是:
def func(times, start, end):
s = 0
e = len(times)-1
while s < len(times) and times[s]< start:
s+=1
while e >= 0 and times[e] > end:
e-=1
if (e < 0 or s >= len(times) or s > e):
return None
return times[s:e+1], (s,e)
def func(时间、开始、结束):
s=0
e=len(次)-1
当s=0且时间[e]>结束时:
e-=1
如果(e<0或s>=len(次)或s>e):
一无所获
返回次数[s:e+1],(s,e)
如果dt>=start,dt是您调用func(times,start,end)
时排序的时间,为什么不简单地[dt for dt in times?是的,它总是需要结果时间中的索引。index()始终返回第一次出现的索引。如果times
列表中有多个对象的值与end
相同,则函数只返回第一个对象。