python中的排序函数(sort或sorted)可以操作list进行排序。

1、sort和sorted的主要区别是:

1)sort是对原list进行排序,sorted会生成新的list。

2)sort函数没有返回值,sorted函数无论迭代对象是什么都会返回一个list

3)sort只能应用在list上,sorted可以应用在所有的可迭代对象上。

4)函数的使用方法不同,如下:

lst. sort(key[, reverse]])
# 下面为默认参数
lst. sort(key = None, reverse = False)
key -- 指定排序时进行比较的元素,只有一个参数,可以指定一个函数或者lambda函数。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
sorted(iterable[,key[, reverse]])
# 默认参数与sort一样
sorted(iterable, key = None, reverse = False)

比sort函数的参数多了一个iterable--可迭代对象。定义如下:

一个数据结构(数组、Map、Set,某些类似数组的对象——比如arguments对象,DOM NodeList对象,Generator对象,字符串等),才可以被for...of循环遍历。 换句话说就是for...of 循环内部调用的是数据结构Symbol.iterator方法。(参考链接)

2、二维数组按列排序以及字符串数组排序

下面的字符串数组虽然是一维的,但是由于每个字符串可以看作一个字符数组,所以也相当于二维数组(但其实并不是二维数组),这里为了对比记忆,我将他们放到了一起。在默认参数下,数组元素将按照列比较,如果同一列的元素数值相等,那么将会比较下一列的元素,如果某一行的元素包含了另一行,如[1,3,5,6]包含了[1,3,5],那么[1,3,5,6]应该排在后面。字符串也同理。字符串的比较应该是比较每一个字符的ascci码,默认情况下,ascci码大的排名靠前。

a = [[1,2,3],[1,3,5,6],[1,3,5],[1,2,5,6]]
a.sort()print(a)
a= ["tomy", "join", "tom", "tam"]
a.sort()print(a)

结果为:

[[1, 2, 3], [1, 2, 5, 6], [1, 3, 5], [1, 3, 5, 6]]
['join', 'tam', 'tom', 'tomy']

3、按照关键字指定列表中的元素排序

1)lambda函数

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
students.sort(key= lambda student:student[2])print(students)
students.sort(key= lambda student:student[1])print(students)

结果:

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
list.sort() 方法只为 list 定义。而 sorted() 函数可以接收任何的 iterable。如字典可以按照其关键字进行排序:
dic = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
# 默认由小到大排序
lst=sorted(dic)print(lst)
# 由大到小排序
lst= sorted(dic, key=lambda s:-s)print(lst)

结果:

[1, 2, 3, 4, 5]

[5, 4, 3, 2, 1]

2)自定义比较函数

python3移除了cmp()函数,但提供了六个丰富的比较运算符,详见链接