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

相关文章
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
238 1
|
3月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
395 1
|
2月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
298 0
|
2月前
|
开发者 Python
Python列表推导式:优雅与效率的完美结合
Python列表推导式:优雅与效率的完美结合
421 116
|
2月前
|
Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
460 119
|
2月前
|
开发者 Python
Python列表推导式:优雅与效率的完美融合
Python列表推导式:优雅与效率的完美融合
338 104
|
2月前
|
Python
Python列表推导式:优雅与效率的艺术
Python列表推导式:优雅与效率的艺术
301 99
|
2月前
|
数据处理 Python
解锁Python列表推导式:优雅与效率的完美融合
解锁Python列表推导式:优雅与效率的完美融合
281 99
|
2月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
437 95
|
3月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
482 99

推荐镜像

更多