2015-09-28 4 views
0

У меня очень длинный список unix-времени (округленный до 10 секунд), и мне нужно найти самую длинную последовательную последовательность временных меток 10 с в этом списке.Получение самой длинной подпоследовательности в разреженном списке значений

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

Если у меня есть список 100 временных отметок и 60, которые находятся в последовательности 600 секунд длинной, а затем Theres 4-минутный перерыв после чего еще 40 в последовательности 400 секунд длинной, я бы вернуть 60 секунд длинный подсписчик временных меток.

Есть ли эффективный способ сделать это? itertools или numpy? Или он должен быть жестко закодирован?

Спасибо.

+0

Это можно сделать в O (n) раз довольно легко, разве это недостаточно эффективно? Что означает * жестко закодированный? –

+0

Я просто имею в виду, есть ли какая-нибудь библиотека, которая сделает это просто или я должен написать полный алгоритм самостоятельно? –

ответ

0

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 
Смежные вопросы