python3内建排序函数:sorted()详解

面试中,排序真的是个经久不衰的问题,最近专门研究了一下python3中的排序函数:sorted()。写出来跟大家一起学习一下。

在python3中,对sorted()的定义是:

>>> help(sorted)
Help on built-in function sorted in module builtins:

sorted(iterable, /, *, key=None, reverse=False)
    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customize the sort order, and the
    reverse flag can be set to request the result in descending order.

简言之:

  1. sorteda()是一个用来排序的内建函数;
  2. 它返回一个新的对象;
  3. 它接收三个参数:

    iterable:一个可迭代对象(列表、元组、字符串);
    key=None:排序关键字,可以提供自定义键函数来自定义排序顺序
    reverse=False:是否反转(是否为按降序请求结果)

用法如下:

list = [1, 4, 3, 2]
print(sorted(list)   # [1, 2, 3, 4]
print(sorted(list, reverse=True))   # [4, 3, 2, 1]

# 这里顺便再比较一下sorted()与sort()方法的区别:
sorted(list)   # [1, 2, 3, 4]
print(list)    # [1, 4, 3, 2]
list.sort()    # [1, 2, 3, 4]
print(list)    # [1, 2, 3, 4]
# 可见,sort()方法直接改变了原数据,而sorted()则是生成了新的数据,不会对原数据进行修改。

参数key的用法,则是比较高级的用法。我们知道,更多情况下,数据并不是一维的,二是形如:[(1, 9), (2, 8), (3, 7)]这样二维或者多维的数据,以此为例,思考这样一个问题:如何按照列表里每一个元组的第二位为基准进行排序?

# key的使用方法:
list = [(1, 9), (2, 8), (3, 7)]
print(sorted(list, key=lambda x:x[1]), reverse=False)  # [(3, 7), (2, 8), (1, 9)]
# 再来试试字典:
dict = {'a': 3, 'b': 2, 'c': 1}
print(sorted(dict.items(), key=lambda x:x[1], reverse=False))   # [('c', 1), ('b', 2), ('a', 3)]
"""
这里注意一下,字典本质上是一个无序的容器对象,3.6版本以后支持有序,但这个有序是按照键的添加顺序,如果要对字典的键或值排序,一般是先转为list,再按照键值排序。这里的dict.items()就是把字典转成键值对的列表,实质上还是对列表排序。关于更多的字典的操作,我会专门写一点关于字典的博客。
"""
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值