在 Python 中,对列表进行排序有两种常用的方法

简介: 在 Python 中,对列表进行排序有两种常用的方法

在 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` 参数来定义排序规则。第一个排序按照元组中的第二个元素(年龄)升序排序,第二个排序按照元组中的第一个元素(姓名)长度降序排序。这种方法简洁而强大,适用于各种复杂的排序需求。

相关文章
|
22小时前
|
索引 Python 容器
深入探索Python字符串:技巧、方法与实战
深入探索Python字符串:技巧、方法与实战
|
1天前
|
存储 Python
Python中使用列表和字典来存储和处理复杂的数据结构
Python中使用列表和字典来存储和处理复杂的数据结构
|
1天前
|
分布式计算 API 开发者
编写高质量Python代码的方法
编写高质量Python代码的方法
14 0
|
1天前
|
数据可视化 Python
详尽分享用Python进行时间序列预测的7种方法
详尽分享用Python进行时间序列预测的7种方法
|
1天前
|
Python
python之列表添加、修改、删除、插入、翻转、排序、复制排序
python之列表添加、修改、删除、插入、翻转、排序、复制排序
7 0
|
1天前
|
Python
python之字符串定义、切片、连接、重复、遍历、字符串方法
python之字符串定义、切片、连接、重复、遍历、字符串方法
5 0
python之字符串定义、切片、连接、重复、遍历、字符串方法
|
2天前
|
存储 Python
Python中列表解包
【6月更文挑战第18天】
12 2
|
3天前
|
JavaScript PHP 网络架构
Python学习技巧及方法总结
Python学习技巧及方法总结
|
3天前
|
Python
python 中列表和元组的解包
【6月更文挑战第17天】
12 1
|
12天前
|
存储 索引 Python
Python零基础入门-5 数据结构(列表和元组
Python零基础入门-5 数据结构(列表和元组