首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >算出平均值

算出平均值
EN

Stack Overflow用户
提问于 2015-06-05 03:22:47
回答 4查看 130关注 0票数 2

我有一个嵌套列表,如下所示:

代码语言:javascript
运行
复制
temperature = [["Jan", 12, 18, 16, 18], ["Feb", 10, 20, 50, 50], ["Mar", 23, 32, 10, 32]]

该列表包含截至12月的所有月份,其中记录了整个月的3个最高温度,然后将3个最高温度中的最高温度附加到列表末尾。

我用下面的方法计算出了每个月的最高温度:

代码语言:javascript
运行
复制
def sortTemp():
    for temp in temperatures:
        temp = [temp[0], temp[4]]
        highest.append(temp)
    highest.sort()
    print(highest)

这是可行的,但是我必须事先计算出最大值,并将其附加到上面解释的温度列表中。有没有更简单的方法来做这件事?

另外,我如何使用温度列表中提供的数据(按最高平均值排序)计算出每个月的平均温度?

输出应如下所示:

代码语言:javascript
运行
复制
AverageTemp = [["Month", AverageTemp], ["Month", AverageTemp]] 
EN

回答 4

Stack Overflow用户

发布于 2015-06-05 03:24:28

您可以使用列表理解来计算平均值

代码语言:javascript
运行
复制
>>> AverageTemp = [[i[0], sum(i[1:])/len(i[1:])] for i in temperature]
>>> AverageTemp
[['Jan', 16.0], ['Feb', 32.5], ['Mar', 24.25]]

或者如果你有numpy

代码语言:javascript
运行
复制
>>> import numpy as np
>>> AverageTemp = [[i[0], np.mean(i[1:])] for i in temperature]
>>> AverageTemp
[['Jan', 16.0], ['Feb', 32.5], ['Mar', 24.25]]

然后,可以使用keyreverse参数进行排序

代码语言:javascript
运行
复制
>>> AverageTemp = sorted([[i[0], np.mean(i[1:])] for i in temperature], key = lambda i: i[1], reverse = True)
>>> AverageTemp
[['Feb', 32.5], ['Mar', 24.25], ['Jan', 16.0]]
票数 2
EN

Stack Overflow用户

发布于 2015-06-05 03:25:59

您可以在sorted函数中使用列表理解:

代码语言:javascript
运行
复制
>>> from operator import itemgetter
>>> sorted([[l[0],sum(l[1:])/4]for l in temperature],key=itemgetter(1),reverse=True)
[['Feb', 32], ['Mar', 24], ['Jan', 16]]

在前面的代码中,首先循环遍历列表,然后通过[l[0],sum(l[1:])/4]获取第一个元素和其余元素的平均值,并使用operator.itemgetter作为排序函数的键,以便根据第二项(平均值)对结果进行排序。

票数 1
EN

Stack Overflow用户

发布于 2015-06-05 03:46:24

了解更多关于list comprehensionslice notation的知识将真正帮助您简单地使用pythonic代码来完成这项工作。

解释@CoryKramer的第一个答案:

代码语言:javascript
运行
复制
>>> AverageTemp = [[i[0], sum(i[1:4])/len(i[1:4])] for i in temperature]
>>> AverageTemp
[['Jan', 15], ['Feb', 26], ['Mar', 21]]

他所做的是使用i循环温度中的列表(这是一个列表列表),然后使用切片表示法来获取所需的信息。显然,i[0]是您的月份,但是符号sum(i[1:4])使用切片符号获得从索引1到索引3的列表中项目的总和。然后,他除以长度,并创建包含所需信息的列表AverageTemp。

注:我已经编辑了他的答案,在@TigerhawkT3的评论中不包括高温两次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30652369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档