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

相关文章
|
4天前
|
Python
11个提升Python列表编码效率的高级技巧
Python中关于列表的一些很酷的技巧
17 1
|
2天前
|
分布式计算 并行计算 算法
探索排序的宇宙奥秘:Python中归并排序的并行处理与分布式应用!
【7月更文挑战第11天】归并排序是一种分治算法,适用于并行和分布式处理。在Python中,利用`concurrent.futures`可实现并行归并排序,但因GIL限制,可能需借助`multiprocessing`或GPU库。分布式归并排序则通过分布式框架如Apache Spark处理大规模数据,每个节点独立排序后进行网络合并。并行与分布式技术提升了处理大数据的速度和效率。**
16 9
|
1天前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
【7月更文挑战第12天】Python的快速排序**以分治策略实现高效排序,平均时间复杂度$O(nlogn)$,优于$O(n^2)$的冒泡排序。基本实现通过选取基准元素分割数组,然后递归排序两部分。优化版使用随机基准避免最坏情况。对比显示优化后排序更稳定,适应不同数据集,提升程序性能。
11 4
|
1天前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
【7月更文挑战第12天】归并排序是高效稳定的排序算法,采用分治策略。Python 实现包括递归地分割数组及合并已排序部分。示例代码展示了如何将 `[12, 11, 13, 5, 6]` 分割并归并成有序数组 `[5, 6, 11, 12, 13]`。虽然 $O(n log n)$ 时间复杂度优秀,但需额外空间,适合大规模数据排序。对于小规模数据,可考虑其他算法。**
13 4
|
1天前
|
数据可视化 PyTorch Serverless
Python 性能分析的几个方法,找到你代码中的那个她
我们在编写了一个脚本在笔记本上处理一些数据,然后去喝杯咖啡或者上了个厕所,15分钟后回来时发现进度才完成不到10%。 我们的脑袋里面就会发问:为什么这么慢?究竟是在哪个部分是慢的?是读取数据、处理数据还是保存数据?如何让它变快?它真的很慢吗? 有了这个疑问我们尝试去解决这个问题,下面我们介绍几个 python 性能分析的工具。
|
1天前
|
存储 缓存 Python
Python中的列表(List)和元组(Tuple)是两种重要的数据结构
【7月更文挑战第12天】Python中的列表(List)和元组(Tuple)是两种重要的数据结构
4 1
|
2天前
|
搜索推荐 算法 大数据
Python排序大法揭秘!归并排序:如何优雅地合并两个世界?
【7月更文挑战第11天】归并排序是Python中一种高效优雅的排序算法,基于分而治之的思想,将数组拆分成小部分,分别排序后再合并。Python实现归并排序的关键在于递归地分割和有序合并数组。其稳定性和O(n log n)的时间复杂度使其在大数据处理中表现出色。通过学习归并排序,我们可以深化对编程思维的理解并提升解决问题的能力。
|
3天前
|
算法 计算机视觉 索引
python---OpenCv(二),背景分离方法较有意思
python---OpenCv(二),背景分离方法较有意思
|
3天前
|
Python
列表推导式(解析式)python
列表推导式(解析式)python
|
5天前
|
SQL 数据库 Python
【Python】已完美解决:(executemany()方法字符串参数问题)more placeholders in sql than params available
【Python】已完美解决:(executemany()方法字符串参数问题)more placeholders in sql than params available
8 1