Get closest datetime from list

in Python, if I have a datetimelist datetimes as well, for example:

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

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

How can I get datetimethe list closest to date?

+4
source share
2 answers

You can use minwith a custom parameter 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)

Subtracting two objects datetime, you get timedeltaobject :

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

which behaves as you expected when comparing.

+9
source

If they are ok, you can also use 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).

+2

All Articles