从零开始学Python-Day28-sorted排序算法

Python零基础 木人张 7个月前 (03-31) 62次浏览 0个评论 扫描二维码

排序是程序中经常用到的一种算法,无论是冒泡排序还是选择排序,排序的核心就是不断比较两者大小。排序算法的示例可以看这里:http://t.cn/A6ZomOGj
数值的比较很好理解,但如果是字符串呢?或者是dict呢?这时就需要把比较过程通过函数抽象表达出来,Python自带sorted函数就可以对list进行排序:

>>> sorted([-45,5,1,-10,9,81,-90])
[-90, -45, -10, 1, 5, 9, 81]

sorted函数同时也是一个高阶函数,可以接收一个函数做key来进行自定义排序,例如我们用abs做key,将序列按绝对值大小排序:

>>> sorted([15,-20,60,-75,13,-2], key=abs)
[-2, 13, 15, -20, 60, -75]

请注意,key只负责中间运算,返回的排序结果依然是之前list中的数,整个过程可以理解为list先按照key函数abs计算生成一个对应顺序的新的序列keys,sorted排序后,将keys中每个元素对应的原序列中的元素再封装到新的list,如下所示,list依然是原来的内容,sorted函数相当于生成了一个全新的list:

>>> list = [15,-20,60,-75,13,-2]
>>> sorted(list, key=abs)
[-2, 13, 15, -20, 60, -75]
>>> list
[15, -20, 60, -75, 13, -2]

我们再看一个字符串排序的例子:

>>> sorted(['Hello','Anna','is','a','girl'])
['Anna', 'Hello', 'a', 'girl', 'is']

细心的朋友可能已经发现了,字符串的排序是按照ASCII编码的大小进行的大写在前,小写在后。如果我们要忽略大小写呢?我们知道sorted是个高阶函数,可以传入key函数,将字符串忽略大小写:

>>> sorted(['Hello','Anna','is','a','girl'], key=str.lower)
['a', 'Anna', 'girl', 'Hello', 'is']

如果要反向排序,可以传入第三个参数reverse:

>>> sorted(['Hello','Anna','is','a','girl'], key=str.lower, reverse=True)
['is', 'Hello', 'girl', 'Anna', 'a']

木人张,版权所有丨如未注明 , 均为原创,禁止转载。
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址