• python排序函数sort()与sorted()区别


    sort是容器的函数:sort(cmp=None, key=None, reverse=False)

    sorted是python的内建函数:sorted(iterable, cmp=None, key=None, reverse=False)

    参数解析:

    cmp:比较函数,比较什么参数由key决定。例如:cmp(e1, e2) 是具有两个参数的比较函数,返回值:负数(e1 < e2);0(e1 == e2);正数( e1 > e2)。
    key:用列表元素的某个属性或函数作为关键字。
    reverse:排序规则,可以选择True或者False。
    sorted多一个参数iterable:待排序的可迭代类型的容器

     

    示例1:

    >>> a=[1,2,5,3,9,4,6,8,7,0,12]
    >>> a.sort()
    >>> a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]


    >>> a=[1,2,5,3,9,4,6,8,7,0,12]
    >>> sorted(a)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
    >>> a
    [1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]

    区别:

    对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。

    而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。

     

    示例2:

    假设用元组保存每一个学生的信息,包括学号,姓名,年龄。用列表保存所有学生的信息。

    >>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
    >>> list1.sort()
    >>> list1
    [(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]


    >>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
    >>> sorted(list1)
    [(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
    >>> list1
    [(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

    小结:由示例可以看出,当列表由list(或者tuple)组成时,默认情况下,sort和sorted都会根据list[0](或者tuple[0])作为排序的key,进行排序。

    以上都是默认的排序方式,我们可以编写代码控制两个函数的排序行为。主要有三种方式:基于key函数;基于cmp函数和基于reverse函数

    1)基于key函数排序

    >>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
    >>> list1.sort(key=lambda x:x[2])
    >>> list1
    [(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]


    >>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
    >>> sorted(list1, key=lambda x:x[2])
    [(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]
    >>> list1
    [(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

     

    2)基于cmp函数

    >>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
    >>> list1.sort(cmp=lambda x,y:cmp(x[1],y[1]))
    >>> list1
    [(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]

     

    >>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
    >>> sorted(list1, cmp=lambda x,y:cmp(x[1],y[1]))
    [(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]
    >>> list1
    [(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

     

    3)基于reverse函数

    >>> a=[1,2,5,3,9,4,6,8,7,0,12]
    >>> a.sort(reverse=False)
    >>> a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

     

    >>> a=[1,2,5,3,9,4,6,8,7,0,12]
    >>> a.sort(reverse=True)
    >>> a
    [12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    >>> a.sort(reverse=True)

    小结:reverse=False为升序排序;reverse=True为降序排序

  • 相关阅读:
    windows下安装redis
    关于 tomcat 集群中 session 共享的三种方法
    利用Nginx做负载均衡
    Spring4 MVC Hibernate4集成
    <mvc:annotation-driven />到底帮我们做了啥
    Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别
    JPA注解指南
    Hibernate与Jpa的关系
    ActiveMQ实现负载均衡+高可用部署方案
    信号接口-视频输出端口介绍
  • 原文地址:https://www.cnblogs.com/yanzi-meng/p/8337284.html
Copyright © 2020-2023  润新知