Как интерпретировать эту итерацию по списку кортежей с использованием ключа, определенного как функция с использованием лямбда? - PullRequest
0 голосов
/ 21 июня 2020

Я использовал алгоритм регрессии лассо для набора дат преступления. После обучения и тестирования модели для отображения ненулевых коэффициентов используется следующий код:

for e in sorted (list(zip(list(X_crime), linlasso.coef_)),
            key = lambda e: -abs(e[1])):
    if e[1] != 0:
        print('\t{}, {:.3f}'.format(e[0], e[1]))

Я не понимаю, как этот код работает !! Я знаю, что это итерация, а ' e ' - это ключ кортежей, а также индекс для запуска l oop. Итерация выполняется по списку кортежей, я хочу узнать больше об объявлении ключа в коде. особенно эта строка.

            key = lambda e: -abs(e[1]))

как это интерпретировать ?? Это объявление диапазона ?? где я могу найти python примеры кодов, в которых реализована такая итерация ?? в чем его значение ??

1 Ответ

0 голосов
/ 21 июня 2020

Я знаю ... e это ... также индекс для запуска l oop

e не индекс, это текущий элемент повторяемой последовательности.

key = lambda e: -abs(e[1]))

Лямбда-функция извлекает второй элемент из e, передает его в abs, умножает на минус один и возвращает результат.

Не зная, что такое abs или каковы ваши значения данных, я создал их для иллюстрации.

>>> X_crime = [3,1,2]
>>> linlasso_coef_ = [9,10,11]

>>> def abs(n):
...    return n*n

Разбивка l oop и лямбда:

Вы перебираете список отсортированных кортежей.

>>> list(zip(list(X_crime), linlasso_coef_))
[(3, 9), (1, 10), (2, 11)]
>>> sorted(list(zip(list(X_crime), linlasso_coef_)))
[(1, 10), (2, 11), (3, 9)]

На первой итерации e равно (1,10).

>>> 
>>> e = (1,10)
>>> e[1]
10
>>> abs(e[1])
100
>>> -abs(e[1])
-100

lambda создает функцию выброса .

>>> lambda e: -abs(e[1])
<function <lambda> at 0x00000213E08538B0>

Функция назначается имени key

>>> key = lambda e: -abs(e[1])
>>> key
<function <lambda> at 0x00000213E0853F70>

Для использования позже (?)

>>> key(e)
-100
>>>

в чем его значение ??

Недостаточно информации, чтобы кто-либо мог адекватно прокомментировать, но предположительно key используется позже в l oop для некоторого типа анализ (?).

...