Python列表排序方法详解与实例演示
编辑:本站更新:2024-12-13 19:17:14人气:2821
在深入探讨 Python 列表的排序方法之前,我们首先明确一下列表是 Python 中最常用的数据结构之一,它允许存储一系列有序、可变的对象。Python 为操作和管理这些数据提供了丰富的内置函数支持,其中就包括对列表进行高效灵活地排序。
### **一、基本排序:sort() 方法**
`list.sort()` 是一个原地排序的方法,即不会返回新的排列后的列表而是直接修改原有列表对象本身的顺序。该方法接受两个可选参数 `key` 和 `reverse`:
# 基本使用(默认升序)
my_list = [3,1,4,2,5]
my_list.sort()
print(my_list) # 输出结果:[1, 2, 3, 4, 5]
# 使用 reverse 参数实现降序排序:
my_list.reverse_sort()
my_list.sort(reverse=True)
print(my_list) # 输出结果:[5, 4, 3, 2, 1]
# key 参数用于指定依据哪个字段或通过哪种规则来进行排序:
names_and_ages = [('Alice', 28), ('Bob', 90), ('Charlie', 7)]
names_and_ages.sort(key=lambda x:x[1])
print(names_and_ages) # 按年龄从小到大输出:[('Charlie', 7), ('Alice', 28), ('Bob', 90)]
### **二、sorted() 函数及其应用**
相比于 list 的 sort() 方法,Python 还提供了一个全局函数 sorted() 来完成类似的功能,但它并不改变原始列表,而会生成一个新的已排序的序列并将其作为结果返回:
original_list = ['banana', 'apple', 'cherry']
sorted_list = sorted(original_list)
print(sorted_list) # 输出结果:['.apple', 'banana', 'cherry']
# 同样可以设置 reverse 和 key 参数,并且功能同上例中的 sort():
numbers = [6, 3, ¼ , -π, e]
numeric_sorted_numbers = sorted(numbers, key=float)
print(numeric_sorted_numbers)
# 输出按数字大小排序的结果:[-pi, ¾, e, 3, 6] (注意 π 在字符串中显示可能不准确)
mixed_data = [{'name': 'Tom', 'age': ⅓}, {'name': 'Jerry', 'age': ½}]
by_age_descending = sorted(mixed_data, key=lambda item:item["age"], reverse=True)
for person in by_age_descending:
print(person)
# 此处将按照 age 键值从高至低打印出字典元素。
### **三、自定义比较函数与复杂场景下的排序**
无论是 `.sort()` 方法还是 `sorted()` 函数,在处理包含非基础类型或者需要特殊逻辑判断时,可以通过传入 `cmp`, 或者现代版本里更推荐使用的 `key` 函数来自定义排序方式。
例如要根据姓名长度而非字母顺序来给名字排序,我们可以这样编写关键键提取器 (`key function`) :
people = ["Peter", "Johnathon", "Zoe"]
length_based_ordering = sorted(people, key=len)
print(length_based_ordering) # 输出结果:['Zoe', 'Peter', 'Johnathon']
# 对于旧版 Python 可以用 cmp 函数 (现已废弃):
from functools import cmp_to_key
def custom_compare(a, b):
return len(b)-len(a)
comparison_function_people = sorted(people, key=cmp_to_key(custom_compare))
assert comparison_function_people == length_based_ordering
总之,掌握 Python 内置的排序机制对于提升代码效率以及解决实际问题具有重要意义。不论是简单直观的基本数值/字符排序需求,亦或是涉及复杂的嵌套容器及多条件复合排序等高级应用场景,利用好`.sort()`方法与`sorted()`函数都能游刃有余地应对挑战。
### **一、基本排序:sort() 方法**
`list.sort()` 是一个原地排序的方法,即不会返回新的排列后的列表而是直接修改原有列表对象本身的顺序。该方法接受两个可选参数 `key` 和 `reverse`:
python
# 基本使用(默认升序)
my_list = [3,1,4,2,5]
my_list.sort()
print(my_list) # 输出结果:[1, 2, 3, 4, 5]
# 使用 reverse 参数实现降序排序:
my_list.reverse_sort()
my_list.sort(reverse=True)
print(my_list) # 输出结果:[5, 4, 3, 2, 1]
# key 参数用于指定依据哪个字段或通过哪种规则来进行排序:
names_and_ages = [('Alice', 28), ('Bob', 90), ('Charlie', 7)]
names_and_ages.sort(key=lambda x:x[1])
print(names_and_ages) # 按年龄从小到大输出:[('Charlie', 7), ('Alice', 28), ('Bob', 90)]
### **二、sorted() 函数及其应用**
相比于 list 的 sort() 方法,Python 还提供了一个全局函数 sorted() 来完成类似的功能,但它并不改变原始列表,而会生成一个新的已排序的序列并将其作为结果返回:
python
original_list = ['banana', 'apple', 'cherry']
sorted_list = sorted(original_list)
print(sorted_list) # 输出结果:['.apple', 'banana', 'cherry']
# 同样可以设置 reverse 和 key 参数,并且功能同上例中的 sort():
numbers = [6, 3, ¼ , -π, e]
numeric_sorted_numbers = sorted(numbers, key=float)
print(numeric_sorted_numbers)
# 输出按数字大小排序的结果:[-pi, ¾, e, 3, 6] (注意 π 在字符串中显示可能不准确)
mixed_data = [{'name': 'Tom', 'age': ⅓}, {'name': 'Jerry', 'age': ½}]
by_age_descending = sorted(mixed_data, key=lambda item:item["age"], reverse=True)
for person in by_age_descending:
print(person)
# 此处将按照 age 键值从高至低打印出字典元素。
### **三、自定义比较函数与复杂场景下的排序**
无论是 `.sort()` 方法还是 `sorted()` 函数,在处理包含非基础类型或者需要特殊逻辑判断时,可以通过传入 `cmp`, 或者现代版本里更推荐使用的 `key` 函数来自定义排序方式。
例如要根据姓名长度而非字母顺序来给名字排序,我们可以这样编写关键键提取器 (`key function`) :
python
people = ["Peter", "Johnathon", "Zoe"]
length_based_ordering = sorted(people, key=len)
print(length_based_ordering) # 输出结果:['Zoe', 'Peter', 'Johnathon']
# 对于旧版 Python 可以用 cmp 函数 (现已废弃):
from functools import cmp_to_key
def custom_compare(a, b):
return len(b)-len(a)
comparison_function_people = sorted(people, key=cmp_to_key(custom_compare))
assert comparison_function_people == length_based_ordering
总之,掌握 Python 内置的排序机制对于提升代码效率以及解决实际问题具有重要意义。不论是简单直观的基本数值/字符排序需求,亦或是涉及复杂的嵌套容器及多条件复合排序等高级应用场景,利用好`.sort()`方法与`sorted()`函数都能游刃有余地应对挑战。
www.php580.com PHP工作室 - 全面的PHP教程、实例、框架与实战资源
PHP学习网是专注于PHP技术学习的一站式在线平台,提供丰富全面的PHP教程、深入浅出的实例解析、主流PHP框架详解及实战应用,并涵盖PHP面试指南、最新资讯和活跃的PHP开发者社区。无论您是初学者还是进阶者,这里都有助于提升您的PHP编程技能。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。