首页 > 代码库 > Python 内置函数sorted()有哪些高级用法?
Python 内置函数sorted()有哪些高级用法?
本文和大家分享的主要是python内置函数sorted()的相关内容,一起来看看吧,希望对大家学习python http://www.maiziedu.com/land/python/有所帮助。
1.对于 Python 内置函数 sorted() ,先拿来跟list(列表)中的成员函数 list.sort() 进行下对比。在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的。
2.主要的区别在于, list.sort() 是对已经存在的列表进行操作,进而可以改变进行操作的列表。而内建函数 sorted 返回的是一个新的list,而不是在原来的基础上进行的操作.
再来,让我们用 Python 自带的帮助函数 help() 看看对于 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 customise the sort order, and the
reverse flag can be set to request the result in descending order.
要先说明的是, 本人用的 Python 版本为3.5, 所以会跟 Python 2的有变差。
由帮助可以看到,传进去一个可迭代的数据,返回一个新的列表,注意,是新的列表!来看看看实例吧:
>>>g=[1,4,6,8,9,3,5]>>>sorted(g)
Out[30]: [1, 3, 4, 5, 6, 8, 9]
>>>sorted((1,4,8,9,3,6))
Out[33]: [1, 3, 4, 6, 8, 9]
>>>sorted(’gafrtp’)
Out[35]: [’a’, ’f’, ’g’, ’p’, ’r’, ’t’]
由以上可以看到,只要是可迭代对象数据,都能够进行排序,生成一个排序后的列表。
如果想要排逆序呢?很简单,只要将可选参数 reverse 设置为 True 即可:
>>>sorted((1,4,8,9,3,6), reverse=True)Out[36]: [9, 8, 6, 4, 3, 1]
高级用法
有时候,我们要处理的数据内的元素不是一维的,而是二维的甚至是多维的,那要怎么进行排序呢?这时候, sorted() 函数内的key 参数就派上用场了!从帮助信息上可以了解到, key参数可传入一个自定义函数。那么,该如何使用呢?让我们看看如下代码:
>>>l=[(’a’, 1), (’b’, 2), (’c’, 6), (’d’, 4), (’e’, 3)]>>>sorted(l, key=lambda x:x[0])
Out[39]: [(’a’, 1), (’b’, 2), (’c’, 6), (’d’, 4), (’e’, 3)]>>>sorted(l, key=lambda x:x[0], reverse=True)
Out[40]: [(’e’, 3), (’d’, 4), (’c’, 6), (’b’, 2), (’a’, 1)]>>>sorted(l, key=lambda x:x[1])
Out[41]: [(’a’, 1), (’b’, 2), (’e’, 3), (’d’, 4), (’c’, 6)]>>>sorted(l, key=lambda x:x[1], reverse=True)
Out[42]: [(’c’, 6), (’d’, 4), (’e’, 3), (’b’, 2), (’a’, 1)]
这里,列表里面的每一个元素都为二维元组, key 参数传入了一个 lambda 函数表达式,其x 就代表列表里的每一个元素,然后分别利用索引返回元素内的第一个和第二个元素,这就代表了 sorted() 函数利用哪一个元素进行排列。而 reverse 参数就如同上面讲的一样,起到逆排的作用。默认情况下, reverse 参数为 False 。
当然,正如一开始讲到的那样,如果想要对列表直接进行排序操作,可以用成员方法 sort()来做:
>>>l.sort(key=lambda x : x[1])>>>l
Out[45]: [(’a’, 1), (’b’, 2), (’e’, 3), (’d’, 4), (’c’, 6)]>>>l.sort(key=lambda x : x[1], reverse=True)>>>l
Out[47]: [(’c’, 6), (’d’, 4), (’e’, 3), (’b’, 2), (’a’, 1)]
对于三维及以上的数据排排序,上述方法同样适用。
来源:博客园
Python 内置函数sorted()有哪些高级用法?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。