Сортированный синтаксис значения лямбда-ключа - PullRequest
0 голосов
/ 15 сентября 2018
student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]
sorted(student_tuples, key=lambda student: student[2])

Это ключевое значение student[2] сортирует список по возрасту.

Но student_tuples[2] дает значение всего третьего кортежа ('dave', 'B', 10), а не третье значение в кортежах списка, как сказано.

Итак, я запутался, как это работает. Разве значение, указанное в лямбде, не должно быть student[x][2]?

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Есть несколько точек, которые вам нужно понять.

  1. sorted(list_name) не изменяет (изменяет) исходный список.
  2. sorted Функция сортирует элементысписок с их первым значением до и если вы не предоставите критерий в виде ключ .

для ex.В вашем случае элементы списка являются кортежами, и поэтому отсортированная функция будет сортировать эти элементы путем сравнения первого элемента каждого кортежа.


Если вы хотите изменить критерий сортировки, тогда вам нужнопредоставить ключ , а затем функция sorted отсортирует элементы на основе критерия, который вы определили в своем ключе.

lambda функция - это функция «на лету» , то есть вы можете одновременно определять и вызывать функцию.

Так, В вашем случае написав sorted(student_tuples, key=lambda student: student[2]). Вы просите python отсортировать список с именем student_tuples на основе критерия key = lambda student:студент [2] . Это означает, что он будет сравнивать 3-й элемент каждого кортежа списка student_tuples и будет соответственно сортировать его.


Теперь,позвольте мне ответить на ваш вопрос так:

Если значение, указанное в лямбде, не должно быть учащимся [x] [2]

Ответ НЕТ, потому что student - это просто параметр функции lambda.Вы могли бы написать ключ = лямбда х: х [2] .Что просто означает, что вместо сравнения x для сортировки достаточно сравнить x [2] т.е. 3-й элемент каждого элемента .

0 голосов
/ 16 сентября 2018

допустим

def fun(x):
    return x[2]
foo=[('x',1,2),('y',2,3),('r',1,9)] 
sorted(foo,key=fun)                                                         

В приведенном выше описании для каждого вызова fun каждый кортеж foo передается fun.in в этом кортеже мы берем второй элемент и сортируем по нему. Таким же образом, как и в предыдущем вопросе, заданном вами, работает аналогично в соответствии с этим.

0 голосов
/ 15 сентября 2018

key = lambda student: student[2] сообщает функции sorted, по какому критерию должны сортироваться элементы student_tuples.

, поэтому функция lambda исследует каждый элемент student_tuples (который здесь называется student), а затем получает второй элемент student[2]. Затем список сортируется по значению этого элемента.

Другими словами, математически student_tuples - это список аргументов (кортежей из трех элементов) для функции lambda, а функция lambda извлекает третий элемент каждого аргумента один за другим.

С другой стороны, student_tuples[2] просто означает, что вы хотите взять третий элемент из student_tuples.

Надеюсь, это как-то прояснит, как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...