Python 数组(列表)排序详解

在Python中,数组的概念并不直接对应其他编程语言中的数组,因为Python中的列表(List)提供了更加灵活和强大的功能,通常被视为数组的一种高级实现。列表是Python中最常用的数据结构之一,它支持动态地添加、删除和修改元素,同时也支持排序操作。本文将详细介绍如何在Python中对列表进行排序,包括使用内置函数、自定义排序规则等。

1. 使用sorted()函数

sorted()是Python的一个内置函数,它可以对任何可迭代对象进行排序,并返回一个新的列表,原列表不会被修改。

基本用法
python 复制代码
numbers = [3, 1, 4, 1, 5, 9, 2] 
sorted_numbers = sorted(numbers) 
print(sorted_numbers) # 输出: [1, 1, 2, 3, 4, 5, 9]

指定排序关键字( key参数)

如果列表中的元素是复杂的数据结构(如字典、元组等),可以使用key参数指定一个函数,该函数会在每个元素上调用,其返回值作为排序的依据。

python 复制代码
students = [ 
{'name': 'Alice', 'age': 22}, 
{'name': 'Bob', 'age': 19}, 
{'name': 'Charlie', 'age': 20} 
] 
sorted_students = sorted(students, key=lambda x: x['age']) 
print(sorted_students) 
# 输出按年龄排序的学生列表
逆序排序(reverse参数)

sorted()函数还有一个reverse参数,当设置为True时,可以进行逆序(降序)排序。

python 复制代码
numbers = [3, 1, 4, 1, 5, 9, 2] 
sorted_numbers_desc = sorted(numbers, reverse=True) 
print(sorted_numbers_desc) # 输出: [9, 5, 4, 3, 2, 1, 1]

2. 使用列表的sort()方法

sorted()函数不同,列表的sort()方法会直接在原列表上进行排序,不返回新的列表。

基本用法
python 复制代码
numbers = [3, 1, 4, 1, 5, 9, 2] 
numbers.sort() 
print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 9]
指定排序关键字和逆序排序

sort()方法也支持keyreverse参数,用法与sorted()相同。

python 复制代码
students = [ 
{'name': 'Alice', 'age': 22}, 
{'name': 'Bob', 'age': 19}, 
{'name': 'Charlie', 'age': 20} 
] 
students.sort(key=lambda x: x['age']) 
print(students) # 输出按年龄排序的学生列表 


students.sort(key=lambda x: x['age'], reverse=True) 
print(students) # 输出按年龄逆序排序的学生列表

3. 自定义排序逻辑

无论是sorted()函数还是sort()方法,都允许通过key参数指定一个函数来自定义排序逻辑。这个函数会在排序过程中被应用到列表的每个元素上,其返回值作为排序的依据。

python 复制代码
# 冒泡排序
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


# 示例使用
array = [64, 34, 25, 12, 22, 11, 90]
sorted_array = bubble_sort(array)
print("Sorted array is:", sorted_array)
python 复制代码
# 快速排序
def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quicksort(left) + middle + quicksort(right)
 
# 示例使用
arr = [3, 6, 8, 10, 1, 2, 1, 4, 7, 9]
sorted_arr = quicksort(arr)
print(sorted_arr)  # 输出: [1, 1, 2, 3, 4, 6, 7, 8, 9, 10]
python 复制代码
# 通过set 去重
# 原始列表
original_list = [3, 2, 1, 5, 2, 3, 4, 5, 7, 7, 8]
 
# 去重并排序
sorted_list = sorted(list(set(original_list)))
 
print(sorted_list)

4. 注意事项

  • sorted()函数返回一个新的列表,原列表不变。
  • sort()方法直接在原列表上进行排序,不返回新列表。
  • 当需要按照多个条件进行排序时,可以在key参数中返回一个元组,元组中的元素将依次作为排序的依据。

结论

Python提供了灵活的排序机制,通过sorted()函数和列表的sort()方法,可以方便地对列表进行排序。无论是简单的数字列表,还是包含复杂数据结构的列表,都可以通过指定排序关键字、逆序排序等方式来满足不同的排序需求。掌握这些排序技巧,将有助于提高Python编程的效率和灵活性。

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书2 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024064 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·4 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it4 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康4 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神5 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式