Я все еще учусь Python, и я пытался разобраться с этой проблемой в течение нескольких часов, но как-то не может получить его работу: Предположим, у нас есть список кортежей, содержащих имена и марки:Python: Сортировка списка, содержащий кортежи
[("Mark", [5,4,1,2,4,3]), ("John", [1,2,3,1,2,1]), ("Patrick", [1,3,5,1,2,4])]
И мы хотим, чтобы получить этот результат:
[("John", [1,2,3,1,2,1]), ("Patrick", [1,3,5,1,2,4]), ("Mark", [5,4,1,2,4,3])]
, где первоначальный список сортируется в порядке возрастания студентов знаков счет (предположим, что мы получаем метки оценка, отбрасывая самую высокую отметку и добавляя все остальные метки вместе). I.e. У Джона есть отметки 1,2,3,1,2,1, поэтому мы отбрасываем метку 3 и добавляем 1 + 2 + 1 + 2 + 1 вместе, что дает нам 7.
Эта задача не будет проблемой вообще, если я не должен был получить этот вывод со всеми их оригинальными отметками. Я написал эту функцию:
def sortedFinalRes(input):
finalRes = 0
sortedRes = []
b = []
for i in range(0, len(input)):
total = 0
a = sorted(input[i][1], key = lambda x: x)
a.pop()
sortedRes += input[i][0], a
total = sum(sortedRes[i*2+1])
b += (sortedRes[i*2], total)
c = sorted(b, key = lambda x: str(x))
print(sortedRes)
print(b)
, где я в основном на первых сортировки марок каждого студента, так что я могу после этого отбрасывать самый высокий с помощью поп(), а затем я просуммировать все остальные из них, что дает мне знаки оценка , Затем я сортирую его по меткам, но результат нужно сортировать, но с оригинальными знаками, а не с меткой. Любые идеи оценены! Приветствия
отличный ответ и промахните его прямо передо мной: P –
Почему двойные лямбды? Lambdas никогда не должен быть привязан к переменным, он пропускает точку. Как насчет 'sorted (d, key = lambda x: sum (x) - max (x))' вместо? – tdelaney
@tdelaney - 'sorted (d, key = lambda x: sum (x [1]) - max (x [1]))', если быть точным. 'x' будет кортежей в списке. Но хорошая идея в целом. – iCodez