按平均值对元组排序
Sort tuple by averages
我有一个元组,目前如下所示:
[['Hussain', 7, 8, 0], ['Max', 3, 4, 3], ['Alexandra', 10, 9, 8]]
我希望能够对这个元组进行排序,以便它按平均值从最高到最低的顺序打印出元组。这是我期望的结果:
['Alexandra', 9],['Hussain', 5],['Max', 3.3333333333]
如有任何帮助,我将不胜感激。
TIA
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)
排序,也就是score/second元素作为键并设置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))
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)
我有一个元组,目前如下所示:
[['Hussain', 7, 8, 0], ['Max', 3, 4, 3], ['Alexandra', 10, 9, 8]]
我希望能够对这个元组进行排序,以便它按平均值从最高到最低的顺序打印出元组。这是我期望的结果:
['Alexandra', 9],['Hussain', 5],['Max', 3.3333333333]
如有任何帮助,我将不胜感激。
TIA
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)
排序,也就是score/second元素作为键并设置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))
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)