Python之排序

2020-01-13 13:00:22 浏览数 (1)

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

代码语言:javascript复制
>>> 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)]
#这中方式的代码效率更高
代码语言:javascript复制
L.sort(cmp=None, key=None, reverse=False)
#对列表L中的所有元素进行排序,key是一个键函数,在排序过程中,进行比较之前,每个元素都经过函数处理,函数的返回值作为排序比较的依据,reverse是一个反转标志,默认是False,表示升序排序,当值设置为True时表示倒序排序。

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

代码语言:javascript复制
>>> 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一样。
代码语言:javascript复制
>>> 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函数介绍

代码语言:javascript复制
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])
代码语言:javascript复制
>>> name
[('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]
>>> key = operator.itemgetter(3)
>>> key(name)
('e', 1)
#其中的调用关系

0 人点赞