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]]
Если вы не используете питона> = 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))
Кстати, у вас есть список не tuple –
О, хорошо, тогда что отличает список и кортеж? - Я полностью забыл. – Hussain
Проверьте этот пост, чтобы узнать о различиях: http://stackoverflow.com/questions/626759/whats-the-difference-between-list-and-tuples –