首页 > 解决方案 > 如何使用定义为使用“lambda”的函数的键来解释对元组列表的迭代?

问题描述

我在犯罪日期集上使用了套索回归算法。在模型训练和测试之后,为了显示非零系数,使用以下代码:

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 ' 是元组的键,也是运行循环的索引。迭代是在元组列表上完成的,我想更多地了解代码中的键声明。尤其是这条线。

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

这个怎么解释??它是一个范围声明吗?我在哪里可以找到实现这种关闭迭代的python示例代码?它的意义是什么??

标签: pythonmachine-learningtuplesiterationkey

解决方案


我知道......e是......也是运行循环的索引

e不是索引它是被迭代的序列的当前项。

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

lambda 函数从中提取第二项e,将其传递给abs乘以减一并返回结果。

不知道您的数据值是什么abs或您的数据值是什么,我编造了它们以进行说明。

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

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

分解循环和 lambda:

您正在遍历排序的元组列表。

>>> 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是在循环中稍后用于某种类型的分析(?)。


推荐阅读