NameError: имя 'sort' не определено, когда key = sort используется в качестве параметра в sorted () - PullRequest
0 голосов
/ 04 февраля 2019

Я получаю следующую ошибку на консоли

newList = sorted(l,key=sort) 
NameError: name 'sort' is not defined

после выполнения следующего фрагмента кода:

if __name__ == '__main__':
    l= [[input(), float(input())] for _ in range(int(input()))]
    print( l)
    new = sorted(l,key=sort)
    print(new)

Из статьи данной я узнал, чтоПараметр key в sorted() может использовать пользовательские / встроенные методы Python.Я пытаюсь отсортировать мой список по алфавиту, поэтому я передал key=sort с пониманием, что он отсортирует мой список по алфавиту.

Пожалуйста, помогите мне, где я здесь не так.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019
Функция

sorted() имеет необязательный параметр, называемый key, который принимает функцию в качестве значения .Эта ключевая функция преобразует каждый элемент перед сортировкой, она принимает значение и возвращает 1 значение, которое затем используется в сортировке вместо исходного значения .

Пример:
Если естьсписок кортежей,
li = [('p1', 20), ('p2', 10), ('p3', 30)]
, и вы хотите отсортировать элементы списка таким образом, чтобы результирующий порядок был следующим:
Ouptut: li = [('p2', 10), ('p1', 20), ('p3', 30)]
Затем все вынужно отсортировать кортежи, основываясь на 2-м элементе в каждом кортеже. Для этого нам нужно использовать пользовательский метод, который будет применяться к каждому элементу, и элементы будут отсортированы по представителю каждого элемента (т. Е. KEY) .
Следовательно, синтаксиск тому же будет следующее:
sorted(li, key=lambda x: x[1])

Редактировать:

Сортировка сама по себе является функцией, которая используется для упорядочения элементов в определенномпорядок.Но его нельзя использовать для извлечения представителя (т. Е. KEY) для каждого элемента в списке.

0 голосов
/ 04 февраля 2019

Ну, sort не является пользовательской / встроенной функцией Python.Это метод в списках, но не имя, доступное глобально.Даже если вы используете его (через key=list.sort), он не даст вам желаемого результата, так как ключевая функция используется для преобразования каждого элемента перед сортировкой.

По умолчанию (без указания параметра key), sorted должен уже сортировать строки по алфавиту (вроде), то же самое со списками, содержащими списки со строкой в ​​качестве первого элемента.Если вы хотите отсортировать "A" и "a" вместе (а также "Z" и "z"), вы можете использовать ключевую функцию str.lower, но вам нужно будет применить это только к первому элементу вашеговнутренние списки:

new = sorted(l, key=lambda x: x[0].lower())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...