Python 列表 sort()函数使用理解
1、sort()函数
1.1、sort()函数
sort()函数是Python内置的一种排序方法,其最核心的特点是:它直接作用在列表上,对列表中的元素进行原地排序,即不生成新的列表,而是在原列表上进行修改。这一特性使得sort()函数在处理大型数据集时具有显著的性能优势,因为它避免了在内存中创建新的列表对象。
1.2 基本语法和参数
sort()方法的语法:
list.sort(key=None, reverse=False)参数
- key:(可选)指定排序规则
- reverse:(可选)升序降序
返回值
- 返回None,同时将原列表排序。也就是没有返回值
1.2.1、key参数
key参数是sort()方法最强大的功能。它允许你自定义排序的逻辑。
key接受一个函数(通常是lambda匿名函数)。在排序比较之前,列表中的每个元素都会先经过这个key函数处理,然后Python会根据这个函数的返回值来进行排序。
a.按字符串长度排序:
对于元素全是字符串的列表,可以按照字符串的长度来排序
list1 = ['abc', 'a', 'abcd', 'ab'] # key=len 意味着对每个单词应用 len() 函数,然后按长度排序 list1.sort(key=len) print(list1)输出:
# 输出: ['a', 'ab', 'abc', 'abcd']本质上是利用字符串的 len() 函数计算长度,再排序,如果遇到 int 这列没有 len() 函数的元素,是会报错 TypeError: object of type ‘int’ has no len()。
b、按第二个字符排序
对于元素全是字符串的列表,可以按照元素的第几个字符排序。
list1 = ['aac', 'fad', 'xdw', 'rcf'] list1.sort(key=lambda x: x[1]) print(list1)输出:
['aac', 'fad', 'rcf', 'xdw']c、查找第n大的元素
先降序,再按照「索引」取值,就能获取列表中第一大的值或第二大的值等。
list1 = [4, 7, 10, 8, 2] list1.sort(reverse=True) print('最大的元素:', list1[0]) print('第二大的元素:', list1[1])输出:
最大的元素: 10 第二大的元素: 82、sorted()函数
Python还提供了一个内置函数sorted(),它也用于排序。理解它们的区别至关重要。
| list.sort() | sorted() | |
|---|---|---|
| 类型 | 列表的方法(method) | 内置函数(function) |
| 使用对象 | 只能用于列表(list) | 可以用于任何可迭代对象(list, tuple, str, dict, etc.) |
| 修改 | 原地修改 | 不能修改原始对象,通常赋值给一个新的变量 |
| 返回值 | None | 返回一个新的、已排序的列表 |
2.1 代码对比
# 使用 list.sort() original_list = [5, 2, 3] original_list.sort() # 直接修改 original_list print(f"Original list after sort(): {original_list}") # 使用 sorted() original_tuple = (5, 2, 3) new_list = sorted(original_tuple) # 不会修改 original_tuple,而是返回新列表 print(f"Original tuple: {original_tuple}") print(f"New list from sorted(): {new_list}")输出:
Original list after sort(): [2, 3, 5] Original tuple: (5, 2, 3) New list from sorted(): [2, 3, 5]3. lambda函数
一个lambda函数是一个小型的、匿名的、单行表达式函数。
3.1 基本语法
lambda arguments: expression- lambda:关键字,表示你正在定义一个lambda函数。
- arguments:和普通函数的参数一样,可以有零个或多个,用逗号分割,也就是形参。
- expression:一个单独的表达式。计算这个表达式的结果,并作为函数的返回值。
3.2 lambda函数与普通函数的对比
A. 使用def(普通函数)
def add(x, y): return x + y result = add(2, 3) print(result)输出:
5B. 使用lambda(匿名函数)
add_lambda = lambda x, y: x + y result = add_lambda(2, 3) print(result)输出:
5