gpt4 book ai didi

python - 如何计算 'for' 循环中最后一项的平均值?

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:59 24 4
gpt4 key购买 nike

我有以下 Python 3 代码:

import random
import numpy as np
data = []
for i in range(0, 100):
value = random.randrange(100)
avg10 = np.average(data[:-10]['value'])
data += [{'value': value, 'avg10': avg10}]

旨在生成列表中的 100 个随机数以及最后 10 个项目的平均值。

不幸的是,代码失败了:

Traceback (most recent call last):
File "avg_test.py", line 6, in <module>
avg10 = np.average(data[:-10]['value'])
TypeError: list indices must be integers or slices, not str

因为我不确定如何从字典列表中访问最后 10 个值项(如果所有 10 个都不可用,则访问更少的项)并将其传递给 numpy 的 average 函数。

例如,我希望输出类似于:

[{'value': 11, 'avg10': 11}, {'value': 62, 'avg10': 36.5}, {'value': 56, 'avg10': 43}, {'value': 48, 'avg10': 44.25}, {'value': 43, 'avg10': 41.8}]

等等。

avg10 是最近(至少)10 项相对于当前项的平均值(理想情况下包括当前项,但不是必须)。如果前一个元素只有一个,则它是 1 个元素的平均值,如果是两个 - 它是两个值项的平均值,依此类推(最后 10 个元素的平均值)。

在这种情况下正确的语法是什么?

最佳答案

为了保留您的字典解决方案并避免第一个切片出现问题,您可以执行以下操作。

你的线路:

avg10 = np.average(data[:-10]['value']) 

应该是:

avg10 = np.average([data[j]['value'] if j>=0 else value for j in range(i-10, i) ])

但这会导致您的均值不是前 10 个结果的平均值,因为没有 10 个先前结果可用...
注意:我选择第一个值本身的意思,但第二个的意思是最后 10 个可用的值,所以只有最后一个。所以前两个值本身就是平均值。这很奇怪。您可以决定使用

更改此行为

avg10 = np.average([data[j]['value'] if j>=0 else firstAverage for j in range(i-10, i) ])

如果您决定将值本身包含在平均值的最后 10 个中(即 {值的字典;最后 9 个项目的平均值和值本身}),那么第一个项目(具有没有以前的项目),你可以这样做:

for i in range(0, 100):
value = random.randrange(100)
lasts = [data[j]['value'] for j in range(i-9, i) if j>=0]
lasts.append(value)
avg10 = np.average(lasts)
data += [{'value': value, 'avg10': avg10}]

在最后一种情况下,您可以更精确地编辑您的问题;)

关于python - 如何计算 'for' 循环中最后一项的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46269720/

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