Effective Python提供90条实用编程技巧,让我们解决常见问题时可以采用新颖并高效的做法。排序就是其中一个经典的,常见的,但又有些复杂需求的算法。所以今天描述的需求会有些复杂。
python中内置sort方法来解决可以有顺序的数据类型的排序,但是对于一般的不能进行大小比较的对象类型,也需要自己给sort方法传递key参数来表明用什么属性排序。
如何实现这个key参数呢?需要用到lambda关键字构造一个函数,并返回我们要用到属性名称做为key参数。
接下来遇到的问题就是如何用多个属性进行排序,比如先按A排序再按B排序,这里面推荐用元组来实现,即通过lambda构建一个返回值是元组的函数,这样key是元组就可以实现多属性排序。
接下来又遇到问题是如果一个属性要升序,一个属性要降序怎么办,对于可计算属性在lambda函数中采用一元减操作符来取反实现反序。
问题又来了,如果要反序的属性不是可计算的不能加负号怎么办,这里又推荐了一种终极办法,但又是最简单的办法,就是对于同一个列表上多次调用sort方法,一次处理一个属性排序,这个其实也是最通用的算法实现!
#计算机# #编程# #Python#