Python之排序

发布时间:2019-08-08 07:44:18编辑:auto阅读(1304)

    列表内置的排序方法sort()

    >>> name
    [('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]
    >>> name.sort()
    >>> name
    [('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)] #对列表排序,默认根据元组的第一个元素排序,该操作直接改变原列表中元素的顺序
    >>> name
    [('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]
    >>> name.sort(key=lambda x: x[1])
    >>> name
    [('e', 1), ('d', 2), ('c', 3), ('b', 4), ('a', 5)] #通过key指定排序的依据。
    >>> name
    [('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]
    >>> name.sort(key=operator.itemgetter(1))
    >>> name
    [('e', 1), ('d', 2), ('c', 3), ('b', 4), ('a', 5)]
    #这中方式的代码效率更高
    L.sort(cmp=None, key=None, reverse=False)
    #对列表L中的所有元素进行排序,key是一个键函数,在排序过程中,进行比较之前,每个元素都经过函数处理,函数的返回值作为排序比较的依据,reverse是一个反转标志,默认是False,表示升序排序,当值设置为True时表示倒序排序。

    列表方法sort()排序会在列表自身上进行操作,有时我们不希望改变原列表。这样可以用python的内置函数sorted()


    >>> help(sorted)
    Help on built-in function sorted in module __builtin__:
    sorted(...)
        sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
    iterable:是可迭代类型;
    cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
    key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
    reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
    返回值:是一个经过排序的可迭代类型,与iterable一样。


    >>> name
    [('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]
    >>> sorted(name)
    [('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)]
    >>> sorted(name,key=operator.itemgetter(1))
    [('e', 1), ('d', 2), ('c', 3), ('b', 4), ('a', 5)]
    >>> name
    [('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]
    sorted的返回值是新列表,原列表没任何改变。

    operator模块的itemgetter函数介绍

    class itemgetter(__builtin__.object)
     |  itemgetter(item, ...) --> itemgetter object
     | 
     |  Return a callable object that fetches the given item(s) from its operand.
     |  After f = itemgetter(2), the call f(r) returns r[2].
     |  After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])
    >>> name
    [('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]
    >>> key = operator.itemgetter(3)
    >>> key(name)
    ('e', 1)
    #其中的调用关系














































关键字