最近写了挺多排序相关的题的,借此对于排序方法做一个总结
执行了一下,好像看起来,没啥差别呢,是不是这两个就可以平换替用呀,那再让我们看看下面的
发现了吧,这个就是入门很容易错的问题,sorted对可迭代对象进行排序之后,不会改变对象本身的值,而是返回一个排序完之后的列表,所以使用时,需要记得用一个对象接收,同时对于sorted来说,它的适用范围也比list.sort方法更广阔,因为它不仅使用于列表,同时适用于特殊的嵌套列表,且可以使用关键字来自定义排序规则.
这个时候突然来了一个二维列表list_=[[1,3],[3,2],[2,1]],我们想根据嵌套列表内第一个关键字进行排序,这时就可以使用我们的lambda 构造一个关键字来进行排序了
同理,如果想要根据第二个关键字进行排序可以写成
这里的原理,其实就是选择你要参考的值时哪里,你要比对的是列表内的第二个值,你就把所有的第二个值取出来,然后进行比较后,返回下标给list_,然后list_根据下标的改变,发生移动,从而完成了改变
这个主要是应用在特殊场景内,假定来了一个成绩单,score_list=[{"math":12,"cn":10},{"math":12,"cn":13},{"math":14,"cn":10},{"math":11,"cn":15}],让你根据math成绩进行排序,这是你发现有两个学生的数学是一样的捏,都是12分,那咋办?,那边教务局说那就按照语文成绩来,这就是多关键字的情况了,这个时候我们可以使用operator内带的itemgetter,来帮助我们啦
这样我们顺利的完成任务了
也不一定每次都能来整数类型,这个时候来了字符串对象,那么我们又该怎么处理呢,比如这个时候来了一个字符串"三思而后行" string_="One Two Three Go",我们怎么给他排序呢,我们可以把他们都处理为小数,然后根据其字符的ASCLL码,进行比对就可以判断出来了
暂时先这样,后续还会继续跟新相关排序技巧的