请帮我找到一个不需要大量循环的解决方案。我有一个时间戳列表,例如
["2014-04-11 08:00:00.000000",
"2014-04-11 09:35:00.000000",
"2014-04-11 09:35:00.000000",
"2014-04-11 09:40:00.000000",
"2014-04-11 11:00:00.000000",
...]
我想“合并”列表中的时间戳,以便彼此的公共(public)窗口(例如 10 分钟)内的时间戳成为一个条目。所以上面的例子列表将变成
["2014-04-11 08:00:00.000000",
"2014-04-11 09:35:00.000000",
"2014-04-11 11:00:00.000000",
...]
还要注意合并的三个时间戳是“9:35”值而不是“9:40”。我想合并时间戳以转到最频繁的条目。如果有平局,则在较早/最频繁的时间戳上合并。
而且我还试图跟踪有多少时间戳被合并。因此,对于上述示例,保留计数的列表将是
[1,3,1,...]
。 最佳答案
这可以解决如下:
import datetime
data = ["2014-04-11 08:00:00.000000", "2014-04-11 09:35:00.000000", "2014-04-11 09:35:00.000000", "2014-04-11 09:40:00.000000", "2014-04-11 11:00:00.000000"]
delta = datetime.timedelta(minutes=10)
result = []
bucket = []
current = None
for item in data:
datetime_obj = datetime.datetime.strptime(item, '%Y-%m-%d %H:%S:%M.%f')
if current is None:
current = datetime_obj
bucket = [current]
continue
if (datetime_obj - current) <= delta:
bucket.append(datetime_obj)
else:
result.append(bucket)
current = datetime_obj
bucket = [current]
if bucket:
result.append(bucket)
for bucket in result:
print(bucket)
例子:
>>> for bucket in result:
... print(bucket)
...
[datetime.datetime(2014, 4, 11, 8, 0)]
[datetime.datetime(2014, 4, 11, 9, 0, 35), datetime.datetime(2014, 4, 11, 9, 0, 40)]
[datetime.datetime(2014, 4, 11, 11, 0)]
此
result
数据结构可用于计算所需的值:标识窗口的每个时间戳以及创建该窗口可用(“已消耗”)的时间戳数。关于python - 合并 Python 中的时间戳列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28057544/