Python sorted () функциональная клавиша = лямбда, ошибка индекса вне диапазона - PullRequest
0 голосов
/ 09 апреля 2020

Я пытался использовать встроенную функцию сортировки в Python3 и столкнулся с проблемой индексации ключа. Если у меня есть:

sorted_list = sorted(unsorted_list, key = lambda items: unsorted_list[2], reverse = True)

, где мой несортированный список является списком кортежей длины 3. Эта строка должна сортировать несортированный список на основе 3-го значения в кортеже.

Проблема в том, что в строке возникает ошибка, если список, который вы пытаетесь отсортировать, имеет длину <= 2. с индексом списка вне диапазона ошибок. Если я запускаю его со списком большей длины, он работает просто отлично. </p>

, когда я пытаюсь заменить индекс на -1 вместо этого, так как это последнее значение в списке, оно прекрасно работает.

sorted_list = sorted(unsorted_list, key = lambda items: unsorted_list[-1], reverse = True)

Является ли это известной ошибкой в ​​функции sorted (), я полагаю, возможно, интерпретатор видит, что unsorted_list [2] не существует, поэтому выражение не выполняется до того, как будет вычислено лямбда-выражение, или я что-то неправильно понимаю в функции sorted ()?

Любая помощь будет принята с благодарностью, спасибо!

1 Ответ

0 голосов
/ 09 апреля 2020

Вы должны индексировать в items (который представляет каждый кортеж в unsorted_list) в функции key, а не unsorted_list:

sorted_list = sorted(unsorted_list, key=lambda items: items[-1], reverse=True)

Пример:

unsorted_list = [('', '', 2), ('', '', 3), ('', '', 1)]
sorted_list = sorted(unsorted_list, key=lambda items: items[-1], reverse=True)
print(sorted_list)

выходы

[('', '', 3), ('', '', 2), ('', '', 1)]
...