按某个时间间隔(不是范围)

时间:2017-10-14 15:32:26

标签: python datetime list-comprehension

这是一种特殊情况,我知道。这是一个程序拍摄的照片捕获时间戳列表,该程序在定期获取数据方面表现不佳。

说我有这些时间戳:

2012-01-11 10:53:19
2012-01-11 10:53:24
2012-01-11 10:53:29
2012-01-11 10:53:35
2012-01-11 10:53:40
2012-01-11 11:03:20
2012-01-11 11:03:25
2012-01-11 11:03:30
2012-01-11 11:13:20
2012-01-11 11:13:25
2012-01-11 11:13:30
2012-01-11 11:13:35
2012-01-11 11:23:19
2012-01-11 11:23:24
2012-01-11 11:23:30
2012-01-11 11:23:35
2012-01-11 11:23:44
2012-01-11 11:24:03

我想要一个列表,这个列表被缩小到相隔至少5分钟的日期时间,并且在那个时间之外没有其他人。所以对于上面的例子,我想:

2012-01-11 10:53:19
2012-01-11 11:03:20
2012-01-11 11:13:20
2012-01-11 11:23:19

2 个答案:

答案 0 :(得分:0)

您可以使用datetime对象之间的比较,例如:

>>> from datetime import datetime
>>> test_1 = datetime.strptime('2012-01-11 11:00:00', '%Y-%m-%d %I:%M:%S')
>>> test_2 = datetime.strptime('2012-01-11 11:10:00', '%Y-%m-%d %I:%M:%S')
>>> date1 = datetime.strptime('2012-01-11 11:03:30', '%Y-%m-%d %I:%M:%S')
>>> test_1 > date1
False
>>> test_2 > date1
True

答案 1 :(得分:0)

  

我不确定最好的方法。我已经开始循环遍历它们,保留最后一个间隔时间戳并比较差异,但这看起来有点粗糙。

这几乎是唯一的方法。列表理解不是更清晰:

def select(v):
  threshold = 5
  if len(selected) > 0 and v < selected[-1] + threshold: 
    return False 
  selected.append(v) 
  return True

timestamps = [1, 2, 5, 6, 7, 10, 11, 12]
selected = []
print([x for x in timestamps if select(x)]) # 1, 6, 11

请注意,仅凭列表理解是不可能的,因为无法知道所选内容。