Python sort()函数有哪些参数?

发布于 2021-01-30 16:07:10

除之外key,是否还有其他参数,例如:value

关注者
0
被浏览
389
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    sort和的参数sorted
    双方sort并sorted有三个关键字参数:cmp,key和reverse。

    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1
    
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
    ``
    
    最好使用key和reverse,因为它们比等效的要快得多cmp。
    
    key应该是一个接受项目并返回值进行比较和排序的函数。reverse允许颠倒排序顺序。
    
    使用key参数
    您可以operator.itemgetter用作键参数,以按元组中的第二,第三等进行排序。
    
    例
    
    

    from operator import itemgetter

    a = range(5)
    b = a[::-1]
    c = map(lambda x: chr(((x+3)%5)+97), a)
    sequence = zip(a,b,c)

    sort by first item in a tuple

    sorted(sequence, key = itemgetter(0))
    [(0, 4, ‘d’), (1, 3, ‘e’), (2, 2, ‘a’), (3, 1, ‘b’), (4, 0, ‘c’)]

    sort by second item in a tuple

    sorted(sequence, key = itemgetter(1))
    [(4, 0, ‘c’), (3, 1, ‘b’), (2, 2, ‘a’), (1, 3, ‘e’), (0, 4, ‘d’)]

    sort by third item in a tuple

    sorted(sequence, key = itemgetter(2))
    [(2, 2, ‘a’), (3, 1, ‘b’), (4, 0, ‘c’), (0, 4, ‘d’), (1, 3, ‘e’)]

    
    说明
    序列可以包含任何对象,甚至不具有可比性,但是如果我们可以定义一个函数,该函数可以为每个项目进行比较,则可以将该函数的key参数传递给sortor sorted。
    
    itemgetter特别是创建一个从其操作数中获取给定项目的函数。文档中的示例:
    
    之后,f=itemgetter(2)呼叫f(r)返回r[2]。
    
    迷你基准,keyvscmp
    出于好奇key和cmp性能的考虑,越小越好:
    
    

    from timeit import Timer
    Timer(stmt=”sorted(xs,key=itemgetter(1))”,setup=”from operator import itemgetter;xs=range(100);xs=zip(xs,xs);”).timeit(300000)
    6.7079150676727295
    Timer(stmt=”sorted(xs,key=lambda x:x[1])”,setup=”xs=range(100);xs=zip(xs,xs);”).timeit(300000)
    11.609490871429443
    Timer(stmt=”sorted(xs,cmp=lambda a,b: cmp(a[1],b[1]))”,setup=”xs=range(100);xs=zip(xs,xs);”).timeit(300000)
    22.335839986801147
    ```

    因此,排序的速度key似乎至少是的两倍cmp。使用itemgetter而不是lambda x: x[1]使排序更快。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看