Как сортировка работает с ключевыми и лямбда-функциями в двух заданных списках - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в программировании и изучении функции сортировки.Несмотря на то, что я выполнил поиск и просмотрел несколько SO статей, касающихся sort / lambda, а некоторые даже очень похожи на мою ситуацию, мне все еще трудно понять, как именно работает этот код.Я также читаю документы (https://docs.python.org/3/howto/sorting.html)), и примеры там имеют смысл для меня, но я не могу перенести эти знания в этот пример здесь. Кто-то будет достаточно любезен, чтобы помочь мне с кодом ниже? Я понимаюэто может быть дубликат, но я спрашиваю только потому, что у меня нет базы знаний, чтобы получить то, что я прочитал из других подобных постов. Пожалуйста, помогите, если можете, спасибо.

a = [13, 15, 81, 4]
b = [0, 1, 2, 3]
b.sort(key = lambda x:a[x])
b = [3, 0, 1, 2]

Какпорядок изменения списка 'b' с [0, 1, 2, 3] на [3, 0, 1, 2]? Как список 'a' вступает в игру?

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Значения списка b значения

Значения b важны, поскольку они используются для индексации в a.Первоначально приведенный вами пример не выдает ошибку, поскольку каждое значение b может использоваться в качестве индекса для получения значений из b.

Другими словами, если значения b изменились с[0, 1, 2, 3] - [1, 2, 3, 4], это приведет к IndexError, поскольку последний элемент, 4, будет указывать на пятый элемент в a, который не существует.


Далееобъяснение

b отсортировано по функции ниже (она же ваша оригинальная лямбда-функция).

def anonymous(x):
    return a[x]

Что происходит под капотом, так это то, что каждое значение b используется в качестве индекса a для извлечения и сравнения значений a.

a[0] = 13
a[1] = 15
a[2] = 81
a[3] = 4

Здесь мы сортируем правую часть каждого уравнения в порядке возрастания: [4, 13, 15, 81].Затем мы получаем соответствующие значения b в том же порядке: [3, 0, 1, 2], что приводит к окончательному отсортированному массиву b.

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

Сортирует b, как если бы каждый элемент в b имел значение соответствующего значения в a.Это может помочь увидеть, что произойдет, если вы сортируете кортежи, состоящие из каждого значения.

>>> sorted(zip(a, b))
[(4, 3), (13, 0), (15, 1), (81, 2)]

Обратите внимание на второй элемент каждого кортежа, где они отсортированы в порядке их первых элементов.

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