• Python中的排序方法


    1 list.sort

    list.sort(key=None, reverse=False)
    

    该方法只能用于list。就地排序,原来的list被修改。key的用法见下文。reverse控制降序还是生序,默认是升序(key为None的前提下。如果key指定了顺序,则reverse=True时采取相反顺序)

    print(a)
    a.sort()
    print(a)
    a.sort(reverse=True)
    print(a)
    

    输出如下:
    [4, 6, 1, 234, 87]
    [1, 4, 6, 87, 234]
    [234, 87, 6, 4, 1]

    2 sorted()

    sorted(iterable, *, key=None, reverse=False)
    

    该方法适用于一切可迭代的对象。返回一个新的排好序的列表。该排序是稳定排序。

    a = [4, 6, 1, 234, 87]
    print(a)
    print(sorted(a))
    

    输出
    [4, 6, 1, 234, 87]
    [1, 4, 6, 87, 234]

    3 key

    现在详细说下参数key
    key必须是个函数,且是接受一个参数的函数。返回key,作为排序时的比较对象。
    比如:key=str.lower
    下面这个对元组排序

    student_tuples = [
        ('john', 'A', 15),
        ('jane', 'B', 12),
        ('dave', 'B', 10),
    ]
    print(sorted(student_tuples, key=lambda student: student[2]) )
    

    根据元组中第3个元素进行比较,结果是:
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    对类对象的排序

    class Student:
        def __init__(self, name, grade, age):
            self.name = name
            self.grade = grade
            self.age = age
        def __repr__(self):
            return repr((self.name, self.grade, self.age))
    
    student_objects = [
        Student('john', 'A', 15),
        Student('jane', 'B', 12),
        Student('dave', 'B', 10),
    ]
    
    print(sorted(student_objects, key=lambda student: student.age))
    

    结果: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    4 operator 提供的便捷方法##

    改写上面的例子

    from operator import itemgetter, attrgetter
    sorted(student_tuples, key=itemgetter(2))
    sorted(student_objects, key=attrgetter('age'))
    

    根据多个值排序(比如先根据成绩排序,成绩一样的再根据年龄排序)

    sorted(student_tuples, key=itemgetter(1,2))
    sorted(student_objects, key=attrgetter('grade', 'age'))
    

    最后一个例子:

    students = ['dave', 'john', 'jane']
    newgrades = {'john': 'F', 'jane':'A', 'dave': 'C'}
    print(sorted(students, key=newgrades.__getitem__))
    

    结果: ['jane', 'dave', 'john']

  • 相关阅读:
    2.6.2 AMQP协议和RabbitMQ基础
    2.6.1 消息队列介绍
    解决VS2015启动时Package manager console崩溃的问题
    项目管理实践
    Android动画之淡入淡出
    Android学习笔记
    Android: 解决ADB server didn't ACK
    Android: 实例解析Activity生命周期
    解决Window Azure: Failed to start Development Storage: the SQL Server instance ‘localhostSQLExpress’ could not be found.
    Spring注解之 Transactional
  • 原文地址:https://www.cnblogs.com/vdvvdd/p/10455829.html
Copyright © 2020-2023  润新知