按平均值排序元组

2024-04-20 12:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组,当前看起来如下所示:

[['Hussain', 7, 8, 0], ['Max', 3, 4, 3], ['Alexandra', 10, 9, 8]]

我希望能够对这个元组进行排序,以便它按从最高到最低的平均值顺序打印出元组。这就是我所期望的结果:

['Alexandra', 9],['Hussain', 5],['Max', 3.3333333333]

如果有人给我帮助,我将不胜感激。你知道吗

短暂性脑缺血发作


Tags: 排序顺序max平均值元组脑缺血hussainalexandra
2条回答
s = [['Hussain', 7, 8, 0], ['Max', 3, 4, 3], ['Alexandra', 10, 9, 8]]
result = sorted([[e[0], sum(e[1:])/len(e[1:])] for e in s], key=lambda x: x[1], reverse=True)
from statistics import mean
from operator import itemgetter
l = [['Hussain', 7, 8, 0], ['Max', 3, 4, 3], ['Alexandra', 10, 9, 8]]

print(sorted(([ele[0],mean(ele[1:])] for ele in l),key=itemgetter(1),reverse=True))

[['Alexandra', 9.0], ['Hussain', 5.0], ['Max', 3.3333333333333335]] 

如果您不使用python>;=3.4,您可以手动进行平均值计算。你知道吗

print(sorted(([ele[0],sum((ele[1:])) /  len(l) - 1] for ele in l),key=itemgetter(1),reverse=True))

ele[0],mean(ele[1:])获取名称和剩余的元素(即分数),然后使用itemgetter(1)(分数/秒元素)作为键进行排序,并将reverse=True设置为从高到低。你知道吗

我还将使用itertools.islice获取切片,以避免使用普通切片构建新列表:

from itertools import islice
print(sorted(([ele[0],mean(islice(ele,1,None))] for ele in l),key=itemgetter(1),reverse=True))

或不使用平均值:

from itertools import islice
print(sorted(([ele[0],sum(islice(ele,1,None)) / len(l) - 1] for ele in l),key=itemgetter(1),reverse=True))

相关问题 更多 >