• python sort和sorted的区别以及使用方法


    iteralbe指的是能够一次返回它的一个成员的对象。iterable主要包括3类:
    第一类是所有的序列类型,比如list(列表)、str(字符串)、tuple(元组)。
    第二类是一些非序列类型,比如dict(字典)、file(文件)。
    第三类是你定义的任何包含__iter__()或__getitem__()方法的类的对象。
     
    sorted(iterable[,cmp,[,key[,reverse=True]]])
    作用:Return a new sorted list from the items in iterable.
              第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。
     
    可选的参数有三个,cmp、key和reverse。
    1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
    2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
    3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
     
    通常来说,key和reverse比一个等价的cmp函数处理速度要快。这是因为对于每个列表元素,cmp都会被调用多次,而key和reverse只被调用一次。

    1、简单排序

    1)sorted(list1)排序不会更改list1本身的序列,只是返回一个升序的序列,而list1.sort()是改变了本身的序列顺序

    2)如果不需要原始序列,list1.sort()效率会高一些

    3)list.sort()方法只为list定义。而sorted()函数可以接收任何的iterable

    2、Key Functions(关键字函数)

    从Python2.4开始,list.sort()和sorted()方法都添加了一个key参数来说明一个函数,这个函数在做比较之前会对list中的每个元素进行调用。

    例如,这里是一个大小写不敏感的字符串比较:

    key的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。这种技术比较快,原因在于对每个输入记录,这个函数只会被调用一次。

    对复杂对象的比较通常是使用对象的切片作为关键字。例如:

    同样的技术适用于有named属性的对象。例如:

    3、Operator Module Functions (Operator模块中的函数)

    上面的key-function模式很常见,因此Python提供了方便的函数使得祖先函数更简单和快捷。operator module有itemgetter,attrgetter,以及从Python2.6开始的methodcaller函数。

    使用这些函数,上面的例子会变得更简单和快捷:

    operator模块支持多级排序。例如先按成绩排序,再按年龄排序:

    4、升序和降序

    list.sort()和sorted()都接收一个reverse参数。它是用于降序排序的标志。例如,为了获得学生年龄的降序排序:

    5、排序稳定性和复杂的排序 从Python2.2开始,排序都保证是稳定的。意思是当多个记录有相同的关键字时,它们原始的排序保留。

    注意到两个'blue'的记录保留了它们原始的顺序,因此('blue',1)保证在('blue',2)之前。 这个好的特性能让你建立复杂的排序。例如,将学生记录按成绩降序排序、按年两升序排列。先按年龄排序,再按成绩排序。 

     摘自 http://www.cnblogs.com/woshitianma/p/3222989.html

  • 相关阅读:
    纯js生成验证码
    按位与,按位或,按位异或,按位取反
    如何使用SVN?
    tp框架-----文件上传
    tp框架---验证码详解
    tp框架为什么验证码加载不出来?----- ob_clean() 可解决
    tp框架-----Model模型层
    PHP错误调试
    对静态页面的一些理解
    wamp环境配置;转自发瑞的博客(www.cnblogs.com/cyrfr/p/6483529.html)
  • 原文地址:https://www.cnblogs.com/wensiyang0916/p/6118947.html
Copyright © 2020-2023  润新知