I have a list of times that I need to assign to time windows (7, 9, 12, 15, 18) to make sure each time window is covered by an element in my list.
from datetime import date, time, datetime
def nearest(items, target):
return min(items, key=lambda x: abs(x - target))
time_list = [datetime.datetime(2019, 12, 17, 7, 30),
datetime.datetime(2019, 12, 17, 9, 0),
datetime.datetime(2019, 12, 17, 16, 0),
datetime.datetime(2019, 12, 17, 18, 30),
datetime.datetime(2019, 12, 17, 21, 30),
datetime.datetime(2019, 12, 17, 12, 30),
datetime.datetime(2019, 12, 17, 19, 0),
datetime.datetime(2019, 12, 17, 0, 0),
datetime.datetime(2019, 12, 17, 14, 30)]
target_times = [datetime.combine(date.today(),time(i,0)) for i in range(6,19,3)]
coverage = [abs(nearest(time_list, t)-t)<time(1,30) for t in target_times]
Desired output:
[True, True, True, True, True]
This currently returns a "<" error, which I can get around, but I am not sure if this is the best way to accomplish what I want to do. I have numpy and scipy libraries available and can probably get others.