<p>你还没说清楚什么时候需要产出。我假设每个原始读数都需要一个平滑读数,平滑读数是原始读数和前100(delta)秒中任何其他读数的算术平均值。在</p>
<p>简单回答:使用收藏.deque... 它的读数永远不会超过“delta”秒。我设置它的方式,你可以把deque当作一个列表来处理,并且很容易计算出平均值或者一些给最近的读数增加权重的奇特的小发明。在</p>
<p>长话短说:</p>
<pre><code>>>> 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
>>>
</code></pre>
<p><strong>编辑</strong></p>
<p>一站式服务:在这里买你的小玩意儿。代码如下:</p>
^{pr2}$
<p>其中upsilon应该略小于1.0(<;=0是非法的,略高于零几乎不会进行平滑处理,可以得到算术平均值加上浪费的CPU时间,大于1则表示目的相反)。在</p>