看到了个比较有趣的帖子,是关于Python列表排序的,参看:知乎的这个帖子。
例子不难:
|
|
其中,诡异的就是作为key
的lambda函数了。
|
|
一个返回tuple的函数,作为key,就可以实现多级排序。什么鬼?!
仔细查了下文档,发现原理是tuple的大小比较……
- 首先,看这个贴子,描述了Tuple的大小比较原则。简而言之,长度要一样,先比较第一个元素,再比较第二个元素。
- 然后,看Python中Sort的原理。简而言之,key作为真正参与cmp的数,可以理解为排序中,每个item的参与比较的“值”(默认就是item)。
So,调整key,使之生成一个Tuple。Tuple的顺序,就是item的排序优先级。
上例中(x<0, abs(x))
,就是先定义了item的value根据和0比较的值排序。因为True
>False
.所以复数大,所以排到后面。后面,abs的比较就不说了。
PS:好久不写。手生了……