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

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

回复:0  查看:2654  
本文和大家分享的主要是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.
  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)]
  对于三维及以上的数据排排序,上述方法同样适用。
来源: 博客园