zoukankan      html  css  js  c++  java
  • 聊一聊Python的sort函数

    在平常的开发中,排序是一个经常会用到的功能。Python提供了sort和sorted函数来进行排序。
    sort函数是list类型的一个方法,调用后直接对list本身进行排序。sorted则是输入一个list对象作为参数,返回一个排序完毕的list。
    如下代码所示:

    a = [5,4,3,2,1]
    print sorted(a)
    

    当然上面是一个非常简单的案例,我们接下来讲一下sort函数的参数:
    参数reverse指的是排序结果是降序还是升序,默认是升序(此时值为False)
    cmp是早期版本的Python提供的一个用于判断排序顺序的参数,它的传入值为一个函数compare(x,y),compare(x,y)函数会在x<y时返回负数,在x>y时返回正数,如果x=y则返回0,如下所示:

    l = [(1,2), (3,4), (5,0)]
    l.sort(cmp=lambda it1, it2:it1[1]-it2[1])
    print l
    

    输出值为[(5, 0), (1, 2), (3, 4)]。可以看到它是按照列表每个元素中第二个数为依据,按照从小到大的顺序排序的。
    在Python2.4以后,加入了key参数,进一步简化了函数的形式。传入的函数只有一个参数,返回一个值,sort或sorted函数将根据返回值来作为排序的依据:

    l = [(1,2), (3,4), (5,0)]
    l.sort(key=lambda it:it[1])
    print l
    

    得到的结果也是[(5, 0), (1, 2), (3, 4)]。可以说形式上比cmp要简单了一些。
    如果key和cmp都传入,并且二者之间还是矛盾的话会怎么样呢?我自己还真试了一下,结果发现程序报错了:

    l = [(1,2), (3,4), (5,0)]
    print sorted(l, key=lambda it:it[0], cmp=lambda it1, it2:it1[1]-it2[1])
    

    输出为:

    Traceback (most recent call last):
      File "F:MyDocumentspython	est", line 2, in <module>
        print sorted(l, key=lambda it:it[0], cmp=lambda it1, it2:it1[1]-it2[1])
      File "F:MyDocumentspython	est", line 2, in <lambda>
        print sorted(l, key=lambda it:it[0], cmp=lambda it1, it2:it1[1]-it2[1])
    TypeError: 'int' object has no attribute '__getitem__'
    

    因此,平时这两个参数之间也不要混用。在Python3.4以后,为了避免歧义,已经将cmp函数删掉了。

  • 相关阅读:
    SQL Server-基础-经典SQL语句
    Web Service简介
    大学学习与班级社团管理经验总结
    arduino超声波开发模块
    CSS中关于居中的几种设置方法
    Software testing lab3
    jQuery表格排序问题
    Jquery中的data()方法、att()、prop()方法的区分
    WEB开发自己收集的资源
    Jquery插件封装---奇怪的代码
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/12342557.html
Copyright © 2011-2022 走看看