sorted() 是Python3的内置函数,它可以对所有可迭代的对象进行排序操作,并且不改变原对象的值,返回一个新的排序后的列表。
基础语法:sorted(iterable, key=None[, reverse=False]
其中key可以为lambda函数,如果想实现由大到小排序,可以令key值为负。也可以通过传入第三个参数 reverse=True来实现反向排序。
下面举几个例子来描述sorted()的排序逻辑
a = [(2, 1), (2, 0),(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]
print(a)
# 输出:[(2, 1), (2, 0),(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]
# 下面两种得到的排序结果一致,可以理解为sorted本身就是按首位元素从小到大/字典序排列,如果相同,再按次位元素从小到大/字典序排列
print(sorted(a))
# 输出:[(1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 1), (2, 2), (2, 3)]
print(sorted(a, key=lambda i: (i[0], i[1])))
# 输出:[(1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 1), (2, 2), (2, 3)]
# 但只指定其中一个元素为key,剩下的元素是按原本在序列中的索引位置排序,而非字典序
print(sorted(a, key=lambda i: i[0]))
# 输出:[(1, 1), (1, 2), (1, 3), (2, 1), (2, 0), (2, 1), (2, 2), (2, 3)]
# 按第2个元素升序排列,如果第二个元素相同,按原列表中出现的先后顺序排列
print(sorted(a, key=lambda i: i[1]))
# 输出:[(2, 0), (2, 1), (1, 1), (2, 1), (1, 2), (2, 2), (1, 3), (2, 3)]
# 先按第2个元素升序排列,如果第二个元素相同,再按第一个元素排列
print(sorted(a, key=lambda i: (i[1], i[0])))
# 输出:[(2, 0), (1, 1), (2, 1), (2, 1), (1, 2), (2, 2), (1, 3), (2, 3)]
以上代码输出结果如下:
[(2, 1), (2, 0), (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]
[(1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 1), (2, 2), (2, 3)]
[(1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 1), (2, 2), (2, 3)]
[(2, 0), (1, 1), (2, 1), (2, 1), (1, 2), (2, 2), (1, 3), (2, 3)]
[(2, 0), (2, 1), (1, 1), (2, 1), (1, 2), (2, 2), (1, 3), (2, 3)]
而sort()是应用在list上的方法,
-
这个方法会修改原始的 list(返回值为None)
-
通常这个方法不如sorted()方便
-
如果你不需要原始的 list,list.sort()方法效率会稍微高一些。