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函数删掉了。

  • 相关阅读:
    C#调用webservice 时如何传递实体对象
    Gridview实现突出显示某一单元格的方法
    oracle数据库存储过程分页
    GridView合并表头多重表头
    Gridview中实现求和统计功能
    C#封装的一个JSON操作类
    C#通过StreamWriter对象实现把数值内容写到记事本
    Android CTS
    离线安装eclipse maven插件
    selenium2 页面对象模型Page Object
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/12342557.html
Copyright © 2011-2022 走看看