美文网首页
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