按平均值排序元组

时间:2015-04-10 22:23:13

标签: python sorting tuples

我有一个目前如下所示的元组:

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

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

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

我很感激任何帮助。

TIA

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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)