0

所以我有一个函数,它采用以下内容:times= 日期时间对象列表,start= 日期时间对象,以及end= 日期时间对象。并返回一个列表,它是开始和结束之间的日期时间对象

def func(times,start,end):
    return times[start:end],(times.index(start),times.index(end))

start如果和/或end实际上不在日期时间对象列表中,我需要它能够仍然工作: times.

因此,如果start不在列表中,它将采用第一个“大于”的项目,start如果不在列表中,它将执行相同的操作end,但它会改为“小于”。

获得实际起点终点的索引也很重要。

我应该在我的函数中添加什么来做到这一点?

4

3 回答 3

1

您可以使用平分

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]))
于 2013-06-06T05:46:23.897 回答
0

这个问题的一种天真的方法:

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)
于 2013-06-06T05:50:27.677 回答
-1

为什么不简单[dt for dt in times if dt >= start and dt <= end]

于 2013-06-06T05:54:17.207 回答