Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 算出平均数_Python_Sorting - Fatal编程技术网

Python 算出平均数

Python 算出平均数,python,sorting,Python,Sorting,我有一个嵌套列表,如下所示: 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

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

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]] 

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

>>> 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]]
然后可以使用
反向
参数进行排序

>>> 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]]

您可以在
排序功能中使用列表理解:

>>> 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]
获得第一个元素和其余元素的平均值,并使用
操作符.itemgetter
作为排序函数的键,根据第二个项目(平均值)对结果进行排序

了解更多关于pythonic的信息,这将真正帮助您通过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的评论,不包括高温两次。

对于给定的数据来说,这不是一个很好的结构:您将不同的项目(月份名称、温度、最高温度)作为未区分的列表元素。我会推荐字典或物品

months = {"Jan":[12, 18, 16], "Feb":[10, 20, 50], "Mar":[23, 32, 10]}
for month in sorted(months, key=lambda x: sum(months.get(x))/len(months.get(x)), reverse=True):
    temps = months.get(month)
    print(month, max(temps), sum(temps)/len(temps))
结果:

Feb 50 26.666666666666668
Mar 32 21.666666666666668
Jan 18 15.333333333333334
Feb 50 26.666666666666668
Mar 32 21.666666666666668
Jan 18 15.333333333333334

结果:

Feb 50 26.666666666666668
Mar 32 21.666666666666668
Jan 18 15.333333333333334
Feb 50 26.666666666666668
Mar 32 21.666666666666668
Jan 18 15.333333333333334

你能解释一下你的密码吗?我在理解列表理解方面有问题。列表理解中是否有不清楚的具体内容?或者你不熟悉列表理解的语法吗?我发现对于列表理解来说,语法很难理解…我真的很想学习和理解代码。通读Python文档,你可以同样地解决你的最大问题,
MaxTemps=[[i[0],max(i[1:])for i in temperature]
…或者如果最高温度已经为您排在第四位,
MaxTemps=[[i[0],i[3]]表示温度为i]
这与Cory的问题相同:在计算平均温度时,它包括最高温度的重复。非常感谢所有支持人员,这是我问的第一个问题,支持是无价的。我从问这个问题中学到了很多。特别感谢jdfLemon和所有其他人的解释。@PythonNewBee,请记住,大多数答案都提供了两次最高温度的平均值。