我有一个时间列表,我需要分配给时间窗口(7、9、12、15、18),以确保每个时间窗口都被我的列表中的一个元素覆盖。
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]
期望的输出:
[True, True, True, True, True]
这当前返回一个“<”错误,我可以绕过它,但我不确定这是否是完成我想做的事情的最佳方法。我有numpy和scipy库可用,可能还可以获得其他库。 问题来源StackOverflow 地址:/questions/59382506/how-to-assign-time-objects-to-bins
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这是我基于此提出的一个解决方案,所以问题是如何在python中检查当前时间是否在范围内?这是可行的,但我想知道是否有更好的解决方案。
def time_in_range(start, end, x):
today = timezone.localtime().date()
start = timezone.make_aware(datetime.combine(today, start))
end = timezone.make_aware(datetime.combine(today, end))
x = timezone.make_aware(datetime.combine(today, x))
if end <= start:
end += timedelta(days=1) # tomorrow!
if x <= start:
x += timedelta(days=1) # tomorrow!
return start <= x <= end
downloaded = [False, False, False, False, False]
times = [time(i,0) for i in [5,8,10,13,16,20]]
for i in range(5):
for start_time in start_times:
if time_in_range(times[i], times[i+1], start_time):
downloaded[i] = True