这个 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]

其排序位置受调用 lambdakey 结果的影响。

实际排序:

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 这是默认值)。