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 第二大的元素: 8

2、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)

输出:

5
B. 使用lambda(匿名函数)
add_lambda = lambda x, y: x + y result = add_lambda(2, 3) print(result)

输出:

5