在稀疏值列表中获取最长的子序列

Getting longest subsequence in sparse list of values

我有一个很长的 unix 时间列表(四舍五入为 10 秒),我需要在该列表中找到间隔 10 秒的最长连续时间戳序列。

[1441831770.0, 1441831780.0, 1441831790.0, ... 1442466860.0, 1442466870.0, 1442466880.0]

如果我有一个包含 100 个时间戳的列表,其中 60 个在 600 秒长的序列中,然后有 4 分钟的休息时间,然后是另外 40 个在 400 秒长的序列中,我会 return 60 秒长的时间戳子列表。

有没有有效的方法来做到这一点? itertools 还是 numpy?还是必须硬编码?

谢谢。

itertools example in the docs that finds consecutive runs。这是它对你的案例的改编(未经测试):

#!/usr/bin/env python2
from itertools import groupby

data = [1441831770.0, 1441831780.0, 1441831790.0, ...]

longest = []
for k, g in groupby(enumerate(data), lambda (i,x): i*10 - int(x)):
    longest = max(longest, [x for _, x in g], key=len)
print longest