从列表中获取最接近的日期时间

时间:2015-04-17 13:12:12

标签: python datetime

在Python中,如果我有一个datetime和一个datetime的列表,例如:

import datetime as dt
date = dt.datetime(1970, 1,1)

dates = [dt.datetime(1970, 1, 2), dt.datetime(1970, 1,3)]

如何获取最接近datetime的列表中的date

2 个答案:

答案 0 :(得分:9)

您可以将min与自定义key参数一起使用:

>>> import datetime as dt
>>> date = dt.datetime(1970, 1, 1)
>>> dates = [dt.datetime(1970, 1, 2), dt.datetime(1970, 1, 3)]
>>> min(dates, key=lambda d: abs(d - date))
datetime.datetime(1970, 1, 2, 0, 0)

减去两个datetime objects会得到timedelta object

>>> map(lambda d: abs(d - date), dates)
[datetime.timedelta(1), datetime.timedelta(2)]

表现得像你在比较中所期望的那样。

答案 1 :(得分:2)

如果他们按顺序你也可以使用bisect:

import datetime as dt
date = dt.datetime(1970, 1, 1,12)

dates = [dt.datetime(1970, 1, 2), dt.datetime(1970, 1,3)]

from bisect import bisect

ind = bisect(dates, date, hi=len(dates)-1)

print(min(dates[ind], dates[ind-1],key=lambda x: abs(x - date)))

找到上限是O(log n)然后我们只是将上部与下部元素dates[ind-1]进行比较,因此对于排序列表,它是O(log n) vs O(n)