gpt4 book ai didi

python - 我可以使用 groupby 在 python 中解决这个问题吗?

转载 作者:可可西里 更新时间:2023-11-01 11:21:06 24 4
gpt4 key购买 nike

我有一个 redis 数据库,它每十秒从 Arduino 接收一次数据。

现在,我想让六个十秒数据计算一个六十秒数据,然后得到六个十秒数据的平均值,最大值,最小值如下。

import json

a = [u'{"id":"proximity_sensor1","tstamp":1440643570238,"avg":15.0,"coefVariation":0.0,"anom":0,"max":15.0,"min":15.0,"sample_size":10}',
u'{"id":"proximity_sensor1","tstamp":1440643580307,"avg":15.0,"coefVariation":0.0,"anom":0,"max":15.0,"min":15.0,"sample_size":9}',
u'{"id":"proximity_sensor1","tstamp":1440643590242,"avg":15.0,"coefVariation":0.0,"anom":0,"max":15.0,"min":15.0,"sample_size":9}',
u'{"id":"proximity_sensor1","tstamp":1440643590242,"avg":15.0,"coefVariation":0.0,"anom":0,"max":15.0,"min":15.0,"sample_size":8}',
u'{"id":"proximity_sensor1","tstamp":1440643590242,"avg":15.0,"coefVariation":0.0,"anom":0,"max":15.0,"min":15.0,"sample_size":9}',
u'{"id":"proximity_sensor1","tstamp":1440643590242,"avg":15.0,"coefVariation":0.0,"anom":0,"max":15.0,"min":15.0,"sample_size":9}']

a = map(lambda x: json.loads(x), a)

#print a

def abc(aaa):
for index in range(0, len(aaa), 6):
abc = aaa[index:(index+6)]
tuples = [('avg', 'max', 'min')]
avg = sum(map(lambda x: x['avg'], abc))/6
min_ = min(map(lambda x: x['min'], abc))
max_ = max(map(lambda x: x['max'], abc))
yield [avg, max_, min_]

print list(abc(a))

我在想有没有更好的方法解决。如果我使用 itertools.groupby,我可以更快地解决它吗?或者谁有简化计算过程的好主意?

最佳答案

通常 itertools.groupby 在某些条件下用于对元素进行分组,但由于在您的情况下您没有任何此类条件,而您只想将每 6 个元素分组在一起,我不认为使用 itertools.groupby会带来任何好处。

话虽这么说,但我可以建议一些其他改进 -

  1. 您可以将“key”参数用于最大/最小函数,而不是当前的 map/lambda 方法,示例 -

    max_ = max(abc, key= lambda x:x['max'])['max']

    与 min() 函数类似。

  2. 此外,我认为对 sum() 而不是 map/lambda 进行列表理解会更具可读性。示例 -

     avg = sum([x['avg'] for x in abc])/6

关于python - 我可以使用 groupby 在 python 中解决这个问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com