首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将跨越多天的日期时间对象的列表放入2小时的垃圾箱中。

问将跨越多天的日期时间对象的列表放入2小时的垃圾箱中。
EN

Stack Overflow用户
提问于 2016-11-21 18:39:46
回答 1查看 358关注 0票数 0

我有一个日期时间对象列表,日期范围跨越多年。

我想把这些日期分成两个小时的垃圾箱。因此,对于0 hr bin,从23:00到1:00的所有日期时间都会在这个容器中(+/- 1小时)。

最后,我想要一个属于bin的每个日期时间的索引列表。所以如果我的约会时间列表是

代码语言:javascript
复制
   datetime.datetime(2014, 10, 3, 20, 29, 54, 268074),
   datetime.datetime(2014, 10, 4, 11, 28, 34, 59937),
   datetime.datetime(2014, 10, 4, 19, 40, 39, 718856),
   datetime.datetime(2016, 8, 18, 12, 17, 57, 417245),
   datetime.datetime(2016, 8, 19, 1, 37, 57, 465573)

我想要一个列表的结果,如:

代码语言:javascript
复制
[[],
 [4],
 [],
 [],
 [],
 [],
 [1,3],
 [],
 [],
 [],
 [0,2],
 []]

其中,结果给出了与最接近0:00的日期时间对应的索引列表,结果给出了最接近2:00的列表,等等。

我的第一个想法是使用datetime.time对象创建一个小时列表,然后从我的列表中减去一个日期时间,并找到最小的时间。

代码语言:javascript
复制
import datetime 
hrs = array([datetime.time(t) for t in arange(0,24,2)])
closetHr = min(hrs - times[0].time())

但是这给了我错误的unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-21 19:01:25

这将产生样本输入的预期输出,避免时间减法:

代码语言:javascript
复制
bins = [[] for t in arange(0,24,2)]
for i,t in enumerate(times):
    ix = (t.hour+1)%24     # "normalize" the hour
    bins[ix/2].append( i ) # convert to a bin index

当该值位于奇数小时边界(即1:00)时,不清楚这是否能满足您的需要,但随后您没有指定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40727185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档