我有一个嵌套列表,如下所示:
temperature = [["Jan", 12, 18, 16, 18], ["Feb", 10, 20, 50, 50], ["Mar", 23, 32, 10, 32]]该列表包含截至12月的所有月份,其中记录了整个月的3个最高温度,然后将3个最高温度中的最高温度附加到列表末尾。
我用下面的方法计算出了每个月的最高温度:
def sortTemp():
for temp in temperatures:
temp = [temp[0], temp[4]]
highest.append(temp)
highest.sort()
print(highest)这是可行的,但是我必须事先计算出最大值,并将其附加到上面解释的温度列表中。有没有更简单的方法来做这件事?
另外,我如何使用温度列表中提供的数据(按最高平均值排序)计算出每个月的平均温度?
输出应如下所示:
AverageTemp = [["Month", AverageTemp], ["Month", AverageTemp]] 发布于 2015-06-05 03:24:28
您可以使用列表理解来计算平均值
>>> AverageTemp = [[i[0], sum(i[1:])/len(i[1:])] for i in temperature]
>>> AverageTemp
[['Jan', 16.0], ['Feb', 32.5], ['Mar', 24.25]]或者如果你有numpy
>>> 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]]然后,可以使用key和reverse参数进行排序
>>> 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]]发布于 2015-06-05 03:25:59
您可以在sorted函数中使用列表理解:
>>> 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作为排序函数的键,以便根据第二项(平均值)对结果进行排序。
发布于 2015-06-05 03:46:24
了解更多关于list comprehension和slice notation的知识将真正帮助您简单地使用pythonic代码来完成这项工作。
解释@CoryKramer的第一个答案:
>>> 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的评论中不包括高温两次。
https://stackoverflow.com/questions/30652369
复制相似问题