在 Python 中,想要对列表元素排序,常用的有以下 2 种方式。
- 使用 sort() 方法。
- 使用 sorted() 函数。
使用 sort() 方法对列表排序
sort() 是 Python 列表的一个方法,它用于实现列表元素的排序(升序或降序)。
语法:
list.sort(key=fn, reverse=True 或 False)说明:
sort() 函数接收以下 2 个参数。
key(可选):它的值是一个函数名,用于定义排序规则,默认值为 None。reverse(可选):它的值是一个布尔值,用于表示升序还是降序,默认值为 False。当 reverse=False 时,表示升序(从小到大)。当 reverse=True 时,表示降序(从大到小)。如果 sort() 不写参数,就默认使用 reverse=False。
示例 1:sort() 按升序排列
nums = [3, 9, 1, 12, 50, 21]
nums.sort()
print(nums)运行结果如下。
[1, 3, 9, 12, 21, 50]分析:
nums.sort() 等价于 nums.sort(reverse=False),表示升序(也就是从小到大排列)。
示例 2:sort() 按降序排列
nums = [3, 9, 1, 12, 50, 21]
nums.sort(reverse=True)
print(nums)运行结果如下。
[50, 21, 12, 9, 3, 1]分析:
nums.sort(reverse=True) 使用的是降序,也就是从大到小排列。
示例 3:key 参数的值是 “内置函数”
colors = ['red', 'orange', 'yellow', 'green', 'blue']
colors.sort(key=len)
print(colors)运行结果如下。
['red', 'blue', 'green', 'orange', 'yellow']分析:
colors.sort(key=len) 中的 “key=len” 表示使用 Python 内置函数 len() 作为参数,此时会根据元素的长度来排序。
示例 4:key 参数的值是 “自定义函数”
def by_age(lst):
return lst[1]
students = [('Jack', 21), ('Lucy', 19), ('Tony', 20)]
students.sort(key=by_age)
print(students)运行结果如下。
[('Lucy', 19), ('Tony', 20), ('Jack', 21)]分析:
上面定义了一个名为 by_age 的函数,用于实现根据元组第 2 个元素(即年龄)进行排序。这种方式在某些场景中很有用,比如根据员工的薪水进行排序。
使用 sorted() 函数对列表排序
sorted() 是 Python 的一个内置函数,它用于对一个可迭代对象中的所有元素排序,并且返回一个列表作为结果。
语法:
sorted(iterable, key=None, reverse=False)说明:
sorted() 函数接收以下 3 个参数。
iterable(必选):是一个可迭代对象,比如元组、列表、字典等。key(可选):用于排序比较的函数,默认为 None。reverse(可选):用于排序的规则,默认为 False。如果为 True,则表示降序排列;如果为 False,则表示升序排列。
示例 5:sorted() 按升序排列
nums = [3, 9, 1, 12, 50, 21]
result = sorted(nums)
print(result)运行结果如下。
[1, 3, 9, 12, 21, 50]分析:
sorted(nums) 等价于 sorted(nums, reverse=False),表示对 nums 升序(也就是从小到大排列)。
示例 6:sorted() 按降序排列
nums = [3, 9, 1, 12, 50, 21]
result = sorted(nums, reverse=True)
print(result)运行结果如下。
[50, 21, 12, 9, 3, 1]分析:
sorted(nums, reverse=True) 表示对 nums 使用降序,也就是从大到小排列。
示例 7:sorted() 对复杂列表排序
users = [('Tony', 20), ('Jack', 21), ('Lucy', 19)]
result = sorted(users, key=lambda user: user[0])
print(result)运行结果如下。
[('Jack', 21), ('Lucy', 19), ('Tony', 20)]分析:
key 的值是一个函数,这个函数应该接收一个参数,然后返回一个用于排序的 key 值。该函数只需要调用一次,所以排序速度很快。
users 是一个列表,这个列表的每一个元素是一个元组。lambda 表达式本质上就是一个函数,lambda user:user[0] 表示函数的参数是 user,也就是 user 这个列表的每一个元素。user[0] 表示这个 lambda 表达式最终返回的是元组的第 1 个元素。也就是说,此时用于排序的是每一个用户的姓名。
如果想要对每一个用户的年龄进行排序,此时也十分简单。只需要修改一下 lambda 表达式的返回值就可以了,代码如下。
result = sorted(users, key=lambda user: user[1])sort() 方法与 sorted() 函数的区别
sort() 方法和 sorted() 函数虽然看起来很像,但它们是完全不同的两个东西,它们之间的区别如下:
sort():是列表的一个方法,它会修改原列表。sorted():是一个内置函数,它不会修改原列表。此外,sorted() 还可以用于字典等的排序。
示例 8:sort() 方法
nums = [3, 9, 1, 12, 50, 21]
nums.sort()
print(nums)运行结果如下。
[1, 3, 9, 12, 21, 50]分析:
sort() 方法会直接对原列表进行修改,但很多时候并不希望原列表被修改,此时就可以使用 sorted() 函数来实现。
示例 9:sorted() 函数
nums = [3, 9, 1, 12, 50, 21]
result = sorted(nums)
print(nums)
print(result)运行结果如下。
[3, 9, 1, 12, 50, 21]
[1, 3, 9, 12, 21, 50]分析:
sorted() 函数并不会影响原列表,而是会返回一个新列表。
