码迷,mamicode.com
首页 > 其他好文 > 详细

Python 内置函数sorted()有哪些高级用法?

时间:2017-04-12 20:56:12      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

本文和大家分享的主要是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.
custom key function can be supplied to customise the sort orderand 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()有哪些高级用法?

标签:

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
jiangjie190
加入时间:2016-02-19
  关注此人  发短消息
文章分类
jiangjie190”关注的人------(0
jiangjie190”的粉丝们------(0
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!