【发布时间】:2018-01-31 04:19:24
【问题描述】:
我遇到了一些对我来说毫无意义的事情。请参阅 sorted 与 range 和 lambda 的这种用法:
sorted(range(-5, 6), key=lambda x: x * x)
在 Python shell 中输出:
[0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5]
现在,为了我的一生,我不明白这个!我一直在玩sorted、lambda 和range,这没有任何意义。例如,如果你在 for 循环中运行 range 位,你会得到这样的结果:
>>> for i in range(-5, 6):
... print(i)
-5
-4
...
0
...
4
5
还有lambda 位:
>>> (lambda x: x * x)(-5)
25
但是把它们放在一起......我不明白如何以这种方式使用key 使顺序与符号无关。
但这对我来说很有意义:
>>> sorted(range(-5, 6), key=lambda x: abs(x))
[0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5]
有人可以解释一下吗?
【问题讨论】:
-
就排序键而言,对数字求平方并取其绝对值是一回事。你没有得到什么?因为对数字求平方会使每个(实数)数字都是正数。从这个意义上说,它与取绝对值具有相同的效果。
-
为什么你认为
x^2和abs(x)的排序会不同? -
n^2 == (-n)^2 -
我怀疑 lambda 确实会分散注意力。
-
@nicorellius 很好,对于每个实数 x,(x)^2 == (-x)^2。想想抛物线图,它是 y 轴上的镜像......或者也许:(-x)^2 == (-x)*(-x) == (-1*x)(- 1*x) == (-1)(-1)(x)(x) == (1)(x)(x) == (x)^2 ...这实际上更像是一个数学问题。再次,只是look at the graph
标签: python python-3.x sorting lambda