Swift51.com
麦子学院 头像
麦子学院  2017-04-12 20:55

Python学习之内置函数sorted()详解

回复:0  查看:1988  
本文和大家分享的主要是python 内置函数sorted()的相关内容,一起来看看吧,希望对大家 学习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)]
  对于三维及以上的数据排排序,上述方法同样适用。
来源: 博客园