У меня есть функция score
, и я хочу отсортировать список в соответствии с ним.Сортировка списка по ключу и извлечение значения без пересчета
Обычно, это легко (просто получите sorted(l, key=score)
), но мне нужны оценки позже в коде, а score
является дорогостоящим по вычислительной цене (поэтому я хочу избежать двойного выигрыша).
Вот мой текущий код:
scores= map(score, l)
new_l= [el for i,el in sorted(enumerate(l), key=lambda (i,el): scores[i])]
Это работает, но это немного сбивает с толку и не особенно читаемы.
Каков наилучший способ достичь этого?
почему 'ключ = лямбда-я, эл:'? –
@PadraicCunningham извините, это на самом деле '(i, el)', для распаковки кортежа – goncalopp