Python中sort和sorted的区别

最近写Python经常需要使用排序,Python2.7内置了两个排序函数,分别是sort和sorted,那么他们的用法和相互的区别是什么样子的呢。

先说说sort()。

s.sort(_[cmp[, key[, reverse]]]_)

_cmp_ specifies a custom comparison function of two arguments (list items) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument: cmp=lambda x,y:cmp(x.lower(), y.lower()). The default value is None.

_key_ specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None.

_reverse_ is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.

sort()函数能够作用于Python的内置可变序列类型,即除了字符串和元组之外的其他序列,如列表和字典。

1
2
3
4
5
6
7
8
>>> l = [1, 3, 4, 2, 5]
>>> print l.sort(lambda x,y: cmp(x, y))
None
>>> l
[1, 2, 3, 4, 5]
>>> l.sort(reverse=True)
>>> l
[5, 4, 3, 2, 1]

再看看sorted()函数。

sorted(_iterable_[, _cmp_[, _key_[, _reverse_]]])

Return a new sorted list from the items in _iterable_.

sorted函数能够作用于任何可迭代的序列类型,包括字符串,元组,列表,字典等,或者是自定义的可迭代的类(需申明iter函数和next函数)。

1
2
3
4
5
>>> l = {'a':1, 'b':4, 'c':3, 'd':7}
>>> sorted(l)
['a', 'b', 'c', 'd']
>>> sorted(l.items(), key=lambda d:d[1])
[('a', 1), ('c', 3), ('b', 4), ('d', 7)]

对比可见。

  1. sort()会改变原本的序列,返回None,而sorted()并不改变原本的序列,而是返回一个新的已排序列表。
  2. sorted()的应用范围比sort()更广泛一点。
  3. sorted()的排序速度要比sort()慢,因为它需要生成一个列表的复制以储存排序结果。