美文网首页
python中list.sort方法和内置函数sorted的区别

python中list.sort方法和内置函数sorted的区别

作者: eeert2 | 来源:发表于2020-04-23 09:47 被阅读0次

    Python中有两种排序的方法:sortedlist.sort

    • sorted(iterable, key=None, reverse=False)
    • list.sort(key=None, reverse=False))

    一、sorted 排序

    • sorted作为Python的内置函数,支持的排序对象更广,对任意可迭代的对象,都可以使用sorted进行排序,如:列表,元组生成器
    • sorted具有返回值,会生成一个新的列表
    import random
    
    
    def gene_data():
        """生产 10 个随机数"""
        for _ in range(10):
            yield random.randrange(100)
    
    
    if __name__ == '__main__':
        ret = sorted(gene_data())
        # 你这里打印的随机数可能会不同
        print(ret)  # [0, 23, 29, 35, 42, 44, 49, 54, 81, 90]
    

    二、list.sort排序

    • 作为列表附带的方法,list.sort只能作用于列表
    • list.sort是在原列表上直接排序,没有返回值。

    三、两种方法对比

    • 如果你要对列表数据排序,那么使用list.sort可以节省空间,不需要额外生成新的列表。
    • 使用list.sort要注意,由于是原地排序,所以无法保留原始数据

    四、key,reverse参数的使用

    • key是指排序函数,与java,javascript中传递的排序函数不同,这里的key函数接收迭代元素,并返回一个代表元素大小的关键字.

    构造用来排序的对象

    class Person:
        def __init__(self, name: str, age: int):
            self.name = name
            self.age = age
    
        def __str__(self):
            return self.name
    
        def __repr__(self):
            return self.name
    

    排序函数

    def key(person: Person) -> int:
        """Person 对象排序的关键字函数
    
        :param person: Person 对象
        :return: 代表 Person 对象的关键字
        """
        return person.age
    

    运行

    if __name__ == '__main__':
        son = Person('son', 18)
        father = Person('father', 42)
        grandfather = Person('grandfather', 66)
    
        family = [father, son, grandfather]
        family.sort(key=key)
        print(family)  # [son, father, grandfather]
    
        family.sort(key=key, reverse=True) # 倒序
        print(family)  # [grandfather, father, son]
    

    下一篇:Python 的key参数

    相关文章

      网友评论

          本文标题:python中list.sort方法和内置函数sorted的区别

          本文链接:https://www.haomeiwen.com/subject/pkfnihtx.html