在 Python 中,对列表进行排序有两种常用的方法:使用列表的 `sort()` 方法和使用内置函数 `sorted()`。这两种方法的区别在于,`sort()` 方法会直接修改原始列表,而 `sorted()` 函数会返回一个新的已排序列表,原始列表保持不变。
使用 `sort()` 方法对列表排序
```python numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] # 使用 sort() 方法对列表进行排序 numbers.sort() print(numbers) # 输出 [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] ```
使用 `sorted()` 函数对列表排序
```python numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] # 使用 sorted() 函数对列表进行排序,返回一个新的已排序列表 sorted_numbers = sorted(numbers) print(sorted_numbers) # 输出 [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] print(numbers) # 原始列表保持不变,输出 [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] ```
指定排序规则
默认情况下,`sort()` 方法和 `sorted()` 函数都会按照升序对列表进行排序。如果需要降序排序,可以使用 `reverse=True` 参数:
```python numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] # 按降序排序 numbers.sort(reverse=True) print(numbers) # 输出 [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1] # 使用 sorted() 函数按降序排序 sorted_numbers = sorted(numbers, reverse=True) print(sorted_numbers) # 输出 [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1] ```
按自定义规则排序
还可以使用 `key` 参数指定一个函数来定义排序规则。例如,按照字符串的长度对列表中的字符串进行排序:
```python words = ["apple", "banana", "cherry", "date", "fig"] # 按字符串长度排序 sorted_words = sorted(words, key=len) print(sorted_words) # 输出 ['date', 'fig', 'apple', 'banana', 'cherry'] ```
以上是使用 `sort()` 方法和 `sorted()` 函数对列表进行排序的基本用法。根据具体需求,可以灵活运用不同的参数和方法来实现不同的排序方式。
除了基本的排序功能外,`sort()` 方法和 `sorted()` 函数还可以通过 `key` 参数指定一个函数来自定义排序规则。这个函数将应用于列表中的每个元素,并根据函数返回的值来排序列表。下面是一个例子:
```python # 定义一个函数,返回字符串的倒序 def reverse_string(s): return s[::-1] # 列表中的元素为字符串 words = ["apple", "banana", "cherry", "date", "fig"] # 使用 key 参数指定自定义排序规则 sorted_words = sorted(words, key=reverse_string) print(sorted_words) # 输出 ['date', 'apple', 'fig', 'banana', 'cherry'] ```
在这个例子中,我们定义了一个 `reverse_string()` 函数,它接受一个字符串并返回其倒序。然后,我们使用这个函数作为 `key` 参数传递给 `sorted()` 函数,这样就按照字符串的倒序对列表进行了排序。
这种方法非常灵活,可以根据实际需求定义各种复杂的排序规则。
除了使用 `key` 参数外,`sort()` 方法和 `sorted()` 函数还支持使用 `lambda` 函数来定义排序规则,这使得排序更加简洁和灵活。下面是一个示例:
```python # 列表中的元素为元组,元组包含姓名和年龄信息 people = [("Alice", 25), ("Bob", 20), ("Charlie", 30), ("David", 35)] # 按年龄升序排序 people.sort(key=lambda x: x[1]) print(people) # 输出 [('Bob', 20), ('Alice', 25), ('Charlie', 30), ('David', 35)] # 按姓名长度降序排序 people.sort(key=lambda x: len(x[0]), reverse=True) print(people) # 输出 [('Charlie', 30), ('David', 35), ('Alice', 25), ('Bob', 20)] ```
在这个例子中,我们使用 `lambda` 函数作为 `key` 参数来定义排序规则。第一个排序按照元组中的第二个元素(年龄)升序排序,第二个排序按照元组中的第一个元素(姓名)长度降序排序。这种方法简洁而强大,适用于各种复杂的排序需求。