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
相同,则函数只返回第一个对象。