你真的明白python排序sort()和sorted()区别吗?


大家都知道,python排序有内置的排序函数 sort() 和 高阶函数sorted() 。但是它们有什么区别呢?

《转型python数据分析学习路线》《转型python数据分析学习路线》


让我们先从这个函数的定义说起:



  • sorted():该函数第一个参数iterable为任意可以迭代的对象,cmp是比较函数,通常为lambda函数,key是用于比较的关键字,reverse表示排序结果是否反转

  • L.sort():该函数的三个参数和 sorted() 的后三个参数含义是一致的,而需要特别注意的是,该函数只适用于列表,而非任意可以迭代的对象。cmp是比较函数,接受两个对象参数 x 和 y,返回 负数(x<y),0(x=y),正数(x>y)。


让我们通过示例看一下:


L.sort()


 
 


这里需要注意的一点是,调用 L.sort() 完成排序后,改变了要排序的列表的结构, 即排序后A为[1, 2, 3, 4, 5, 6]。


我们可以指定关键字排序,比如:


 
 


学生列表中包含列表,每个列表是学生的姓名、成绩以及年龄,排序过程中指定了key为学生的年龄,所以排序的结果为:[['Andy', 'B', 11], ['Jack', 'C', 18], ['Tom', 'A', 20]]。


除了通过key来实现,根据年龄排序我们也可以通过定义cmp函数来实现:


 
 


通过定义 key 和 cmp 都可以完成排序,但是这两者之间有什么区别呢?cmp传入的函数在整个排序过程中会调用多次,因为会进行多次比较,所以函数调用开销较大,因此使用 key 的效率比 cmp 的效率要高。


sorted()


sorted()可以应用于任意的可以迭代的对象,所以应用范围比L.sort() 广泛的多,可以应用于字符串,元组,列表,字典等可迭代对象。


 
 


需要注意的是,该函数会返回一个排序后的列表,原有可迭代对象保持不变,这与 L.sort() 函数不同。然而,这会浪费较大的存储空间,尤其是数据量较大时。所以,在列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用L.sort() 节省内存空间,提高效率


有的排序可能需要根据两个关键字,常用的比如单词的排序,第一个字母相同然后根据第二个字母排序,Python中的 sorted() 函数是否支持这种实现呢?答案是肯定的,再设置 key 时指定多个属性即可:



排序的结果为 ['big', 'binary', 'cat', 'dog']。


总结


  • L.sort() 函数只适用于列表排序,而sorted()函数适用于任意可以迭代的对象排序。

  • L.sort() 函数排序会改变原有的待排序列表,而sorted()函数则不会改变。所以在使用列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用L.sort() 节省内存空间,提高效率

  • 两个函数通过定义 key 和 cmp 都可以完成排序,但是 key 的效率要远远高于 cmp,所以要优先使用 key 。


  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值