sort() 与 sorted

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

iterable -- 可迭代对象。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

1、sorted()作用于任意可迭代的对象,而sort()一般作用于列表。

In [25]: a = (1,2,3,4)

In [26]: sorted(a)
Out[26]: [1, 2, 3, 4]

In [27]: a.sort()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in ()
----> 1 a.sort()

AttributeError: 'tuple' object has no attribute 'sort'

2、sorted()会返回一个排序后的列表,原有列表保持不变,而sort()会直接修改原有的列表,函数返回为None。

In [28]: a = [34,4,3,56,66]

In [29]: sorted(a)
Out[29]: [3, 4, 34, 56, 66]

In [30]: a.sort()

In [31]:

因此如果实际应用过程中需要保留原有列表,使用sorted()较为合适,否则可以选择sort(),因为sort()不需要复制原有列表,消耗的内存较少,效率也较高。

3、key针对每个元素仅作一次处理。

from timeit import Timer

a_time = Timer(stmt='sorted(xs,key=lambda x:x[1])',setup='xs=range(100);xs=zip(xs,xs);').timeit(10000)
print(a_time)

4、sorted()能针对不同的数据结构进行排序,结合operator模块的itemgetter()方法实现。

operator.itemgetter()官方说明:
https://docs.python.org/3.6/library/operator.html?highlight=itemgetter#operator.itemgetter

对字典排序:

from operator import itemgetter

phonebook = {'Linda':'7750','Bob':'9345','Carol':'5834'}
sorted_pb = sorted(phonebook.items(),key=itemgetter(1))
print(sorted_pb)

结果:
[('Carol', '5834'), ('Linda', '7750'), ('Bob', '9345')]

对多维list排序:

from operator import itemgetter

gameresult = [
    ['Bob',95.00,'A'],
    ['Alan',86.00,'C'],
    ['Mandy',82.5,'A'],
    ['Rob',86,'E']
]

# 当等级相同的时候,分数从低到高排序
sorted_gr = sorted(gameresult, key=itemgetter(2,1))
print(sorted_gr)

结果:
[['Mandy', 82.5, 'A'], ['Bob', 95.0, 'A'], ['Alan', 86.0, 'C'], ['Rob', 86, 'E']]

你可能感兴趣的:(sort() 与 sorted)