zoukankan      html  css  js  c++  java
  • Python 内置函数sorted()在高级用法

    1. 对于Python内置函数sorted(),先拿来跟list(列表)中的成员函数list.sort()进行下对比。在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的。
      主要的区别在于,list.sort()是对已经存在的列表进行操作,进而可以改变进行操作的列表。而内建函数sorted返回的是一个新的list,而不是在原来的基础上进行的操作.

    2. 再来,让我们用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, 所以会跟Python2的有变差。

    由帮助可以看到,传进去一个可迭代的数据,返回一个新的列表,注意,是新的列表!来看看看实例吧:

    >>>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']

    由以上可以看到,只要是可迭代对象数据,都能够进行排序,生成一个排序后的列表。

    1. 如果想要排逆序呢?很简单,只要将可选参数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)]

    对于三维及以上的数据排排序,上述方法同样适用。

  • 相关阅读:
    1104 Sum of Number Segments (20 分)(数学问题)
    1092 To Buy or Not to Buy (20 分)(hash散列)
    1082 Read Number in Chinese (25 分)(字符串处理)【背】
    1105 Spiral Matrix (25 分)(模拟)
    初识网络安全及搭建网站(内网)
    HTML5开发者需要了解的技巧和工具汇总(转)
    native+web开发模式之web前端经验分享
    移动平台3G手机网站前端开发布局技巧汇总(转)
    Asp.net 中图片存储数据库以及页面读取显示通用方法详解附源码下载
    使用H3Viewer来查看VS2010的帮助文档
  • 原文地址:https://www.cnblogs.com/pythonClub/p/10429411.html
Copyright © 2011-2022 走看看