nic*_*ius 2 python sorting lambda python-3.x
我遇到了一些对我没用的东西.请参阅sortedwith range和的使用lambda:
sorted(range(-5, 6), key=lambda x: x * x)
Run Code Online (Sandbox Code Playgroud)
哪个在Python shell中输出:
[0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5]
Run Code Online (Sandbox Code Playgroud)
现在,对于我的生活,我不明白!我一直在玩弄sorted,lambda以及range和它没有任何意义.例如,如果range在for循环中运行该位,则会得到如下内容:
>>> for i in range(-5, 6):
... print(i)
-5
-4
...
0
...
4
5
Run Code Online (Sandbox Code Playgroud)
并且lambda位:
>>> (lambda x: x * x)(-5)
25
Run Code Online (Sandbox Code Playgroud)
但把它们放在一起......我不明白如何使用key这种方式使命令独立于符号.
但这对我有意义:
>>> sorted(range(-5, 6), key=lambda x: abs(x))
[0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5]
Run Code Online (Sandbox Code Playgroud)
有人可以对此有所了解吗?
让我们一步一步地完成:
你正在排序的序列是range(-5, 6),[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5].
该序列的元素及其对应的键是:
x | x * x
----|-------
-5 | 25
-4 | 16
-3 | 9
-2 | 4
-1 | 1
0 | 0
1 | 1
2 | 4
3 | 9
4 | 16
5 | 25
Run Code Online (Sandbox Code Playgroud)现在让我们按键对这个表进行排序:
x | x * x
-----------|-------
0 | 0
-1 and 1 | 1
-2 and 2 | 4
-3 and 3 | 9
-4 and 4 | 16
-5 and 5 | 25
Run Code Online (Sandbox Code Playgroud)
这意味着,输出sorted()将是0,则-1和1以某种顺序,然后-2和2在一些顺序等 sorted()进行稳定的排序,所以使用相同的密钥的任何输入元件将在相同的顺序,它们出现在所述输入输出; 因为负数出现在正数之前range(-5, 6),这意味着sorted()将-1在之前1,-2之前2等输出.
因此,最终的输出是[0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5].