Вы не сказали точно, когда хотите вывод. Я предполагаю, что вы хотите одно сглаженное чтение для каждого необработанного чтения, и сглаженное чтение должно быть средним арифметическим необработанного чтения и любых других за предыдущие 100 (дельта) секунд.
Краткий ответ: используйте collection.deque ... он никогда не будет содержать больше, чем "дельта" секунд чтения. Как я настроил, вы можете рассматривать деку как список и легко вычислять среднее значение или некоторую причудливую штуковину, которая придает больший вес последним показаниям.
Длинный ответ:
>>> the_data = [tuple(map(float, x.split())) for x in """\
... 6 0.738158581
... 21 0.801697222
[snip]
... 251 8.76853608
... 278 9.092367123""".splitlines()]
>>> import collections
>>> delta = 100.0
>>> q = collections.deque()
>>> for t, v in the_data:
... while q and q[0][0] <= t - delta:
... # jettison outdated readings
... _unused = q.popleft()
... q.append((t, v))
... count = len(q)
... print t, sum(item[1] for item in q) / count, count
...
...
6.0 0.738158581 1
21.0 0.7699279015 2
39.0 1.112360133 3
49.0 1.52907127225 4
54.0 1.791208525 5
79.0 2.13137915133 6
91.0 2.49500989771 7
97.0 2.8309395405 8
100.0 3.12993279856 9
118.0 3.74976297144 9
131.0 4.41385300278 9
147.0 4.99420529389 9
157.0 5.8325615685 8
176.0 6.033109419 9
202.0 7.15545189083 6
223.0 7.4342562845 6
251.0 7.9150342134 5
278.0 8.4246097095 4
>>>
Редактировать
Универсальный магазин: купите здесь свою причудливую штуковину. Вот код:
numerator = sum(item[1] * upsilon ** (t - item[0]) for item in q)
denominator = sum(upsilon ** (t - item[0]) for item in q)
gizmoid = numerator / denominator
где upsilon должен быть чуть меньше 1,0 (<= ноль недопустимо, чуть больше нуля делает небольшое сглаживание, вы получаете среднее арифметическое плюс потраченное время процессора, а больше, чем наоборот) 1015 *