这个 lambda 函数的一些解释
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
取什么值。是列表元素的位置 [0,1,2,..,8]
还是实际元素的值 [1,2,3,.,9]
谁能解释一下?
x
是实际元素。
写作时:
key=lambda x: abs(2-x)
完全如:
def sort_key(x):
return abs(2 - x)
但是在写key=lambda x: abs(2-x)
.
时只有函数体传递给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 [=19 上的元素旁边=]
- 元素
4
给出 2
所以它位于索引 2
.....
等等。
它是传递给 lambda 的值,它 return 是用于排序的新 'keys'。
在这种情况下,lambda 将 return [1, 0, 1, 2, 3, 4, 5, 6, 7] 因此带有键 0 的值 2 将移动到前面,随后1 和 3,它们都有索引 1,然后是其余值。
首先:Python 的内置 sorted 函数具有签名:
sorted(iterable, *, key=None, reverse=False)
意味着如果一个值传递给key
参数,sorted
将根据key
的值对iterable
进行排序。
其次:在这种情况下,key
接受一个函数 (lambda) 并对其求值。评估结果如@alexzander 的回答[1,0,1,2,3..7]
。
sorted
将其用作 key
以按该顺序对给定列表进行排序(升序,假设 reverse=False
这是默认值)。
试图了解如何计算下面的表达式,查看返回的列表:
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
取什么值。是列表元素的位置 [0,1,2,..,8]
还是实际元素的值 [1,2,3,.,9]
谁能解释一下?
x
是实际元素。
写作时:
key=lambda x: abs(2-x)
完全如:
def sort_key(x):
return abs(2 - x)
但是在写key=lambda x: abs(2-x)
.
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 [=19 上的元素旁边=] - 元素
4
给出2
所以它位于索引2
.....
等等。
它是传递给 lambda 的值,它 return 是用于排序的新 'keys'。
在这种情况下,lambda 将 return [1, 0, 1, 2, 3, 4, 5, 6, 7] 因此带有键 0 的值 2 将移动到前面,随后1 和 3,它们都有索引 1,然后是其余值。
首先:Python 的内置 sorted 函数具有签名:
sorted(iterable, *, key=None, reverse=False)
意味着如果一个值传递给key
参数,sorted
将根据key
的值对iterable
进行排序。
其次:在这种情况下,key
接受一个函数 (lambda) 并对其求值。评估结果如@alexzander 的回答[1,0,1,2,3..7]
。
sorted
将其用作 key
以按该顺序对给定列表进行排序(升序,假设 reverse=False
这是默认值)。