[英]Some explanation for this lambda function
试图了解如何评估下面的表达式,查看返回的列表:
sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(2-x))
这使:
[2, 1, 3, 4, 5, 6, 7, 8, 9]
我不确定abs(2-x)
x
的 x 取什么值。 是列表元素的 position [0,1,2,..,8]
还是实际元素的值[1,2,3,.,9]
有人可以解释吗?
它是传递给 lambda 的值,它返回用于排序的新“键”。
在这种情况下,lambda 将返回 [1, 0, 1, 2, 3, 4, 5, 6, 7] 因此键为 0 的值 2 将移到前面,然后是 1 和 3,它们都有索引1、然后是rest的数值。
x
是实际元素。
写作时:
key=lambda x: abs(2-x)
它完全如:
def sort_key(x):
return abs(2 - x)
但是在编写key=lambda x: abs(2-x)
时,只有 function 的主体被传递给key
。
列表:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
调用lambda
时,其排序位置受key
结果的影响。
实际排序:
1 -> abs(2 - 1) = (1) [position]
2 -> abs(2 - 2) = (0) [position]
3 -> abs(2 - 3) = (1) [position]
4 -> abs(2 - 4) = (2) [position]
5 -> abs(2 - 5) = (3) [position]
6 -> abs(2 - 6) = (4) [position]
7 -> abs(2 - 7) = (5) [position]
8 -> abs(2 - 8) = (6) [position]
9 -> abs(2 - 9) = (7) [position]
解释:
1
给出1
,因此它位于索引1
2
给出0
,因此它位于索引0
上3
给出1
,因此它位于索引1
上,但1
已被占用,因此它位于 pos 1
上的元素旁边4
给出2
,因此它位于索引2
……
等等。
第一:Python内置的sorted function有签名:
sorted(iterable, *, key=None, reverse=False)
这意味着如果将值传递给key
参数, sorted
将根据key
的值对iterable
进行排序。
第二:在这种情况下, key
采用 function (lambda) 并对其进行评估。 评估结果如@alexzander 的回答[1,0,1,2,3..7]
中所述。 sorted
使用它作为key
以按该顺序对给定列表进行排序(升序,假设reverse=False
这是默认值)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.