python - 如何使用定义为使用“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示例代码?它的意义是什么??
解决方案
我知道......
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
是在循环中稍后用于某种类型的分析(?)。
推荐阅读
- android - 非生命周期类中的 Kotlin 协程范围和作业取消
- javascript - 如何在 Promise 中包装条件语句
- sql - 如何在 BLoC 模式中调用 sink.fromFuture?
- python - Pandas Series 使用字符串和嵌套列表访问值之间的区别
- javascript - 路由后引导模式不再工作
- reactjs - 反应情感CSS - 模板文字返回函数不是值
- python - 当变量等于 x 时触发事件 - python
- javascript - Safari 的 documentFragment.querySelector 问题
- python - PyYAML 不解析所有示例
- ruby-on-rails - 如何从 Rails 执行 shell 命令?