Python3(19)数据结构

在 Python 编程中,数据结构是组织和存储数据的重要方式,合理选择和使用数据结构能显著提升程序的效率和可读性。这篇博客通过丰富的代码示例深入学习 Python3 的数据结构知识,方便日后复习回顾。

一、列表(List)

1.1 列表的特性与常用方法

列表是 Python 中常用且灵活的数据结构,它的元素可变,这使其区别于字符串和元组。以下是一些列表常用方法的示例:

python 复制代码
my_list = [1, 2, 3, 3, 4]
# append方法:在列表末尾添加元素
my_list.append(5)
print(my_list)  
# extend方法:添加另一个列表的所有元素
my_list.extend([6, 7])
print(my_list)  
# insert方法:在指定位置插入元素
my_list.insert(2, 2.5)
print(my_list)  
# remove方法:删除指定值的第一个元素
my_list.remove(3)
print(my_list)  
# pop方法:移除并返回指定位置的元素,默认是最后一个
popped_item = my_list.pop()
print(popped_item)  
print(my_list)  
# clear方法:清空列表
my_list.clear()
print(my_list)  

1.2 将列表当作栈使用

栈是一种后进先出(LIFO)的数据结构,Python 列表可方便地实现栈操作。示例如下:

python 复制代码
stack = []
# 压入元素
stack.append(10)
stack.append(20)
stack.append(30)
print(stack)  
# 弹出元素
popped = stack.pop()
print(popped)  
print(stack)  
# 查看栈顶元素
top = stack[-1]
print(top)  
# 检查栈是否为空
is_empty = len(stack) == 0
print(is_empty)  
# 获取栈的大小
size = len(stack)
print(size)  

1.3 将列表当作队列使用

队列是先进先出(FIFO)的数据结构,虽然列表可实现队列功能,但频繁在开头操作效率较低。collections.deque是更优选择,示例如下:

python 复制代码
from collections import deque
# 使用deque实现队列
queue = deque()
queue.append('a')
queue.append('b')
queue.append('c')
print(queue)  
first = queue.popleft()
print(first)  
print(queue)  
front = queue[0]
print(front)  
is_empty = len(queue) == 0
print(is_empty)  
size = len(queue)
print(size)  

如果坚持使用列表实现队列:

python 复制代码
list_queue = []
list_queue.append('x')
list_queue.append('y')
list_queue.append('z')
print(list_queue)  
removed = list_queue.pop(0)
print(removed)  
print(list_queue)  

1.4 列表推导式

列表推导式是创建列表的简洁方式。例如:

python 复制代码
nums = [1, 2, 3, 4]
# 对列表元素进行运算生成新列表
squared_nums = [num ** 2 for num in nums]
print(squared_nums)  
# 使用if子句过滤元素
even_squared_nums = [num ** 2 for num in nums if num % 2 == 0]
print(even_squared_nums)  

1.5 嵌套列表解析

处理嵌套列表时,列表解析可用于转换矩阵等操作。例如,将 3X4 的矩阵转置:

python 复制代码
matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
]
transposed = [[row[i] for row in matrix] for i in range(4)]
print(transposed)  

1.6 del 语句

del语句可根据索引删除列表元素或切片,还能删除整个列表。例如:

python 复制代码
my_list = [10, 20, 30, 40, 50]
del my_list[2]
print(my_list)  
del my_list[1:3]
print(my_list)  
del my_list

二、元组(Tuple)

元组由逗号分隔的值组成,元素不可变。例如:

python 复制代码
my_tuple = (1, 'hello', 3.14)
print(my_tuple[0])  
# 尝试修改元组元素会报错
# my_tuple[0] = 2  

元组也支持嵌套:

python 复制代码
nested_tuple = ((1, 2), (3, 4))
print(nested_tuple[1][0])  

三、集合(Set)

集合是无序且不重复元素的集合,可用于关系测试和去重。示例如下:

python 复制代码
my_set = {1, 2, 2, 3, 4}
print(my_set)  
# 成员检测
print(3 in my_set)  
# 集合运算
set_a = {1, 2, 3}
set_b = {3, 4, 5}
print(set_a - set_b)  
print(set_a | set_b)  
print(set_a & set_b)  
print(set_a ^ set_b)  
# 集合推导式
new_set = {num for num in range(1, 6) if num % 2 == 0}
print(new_set)  

四、字典(Dictionary)

字典以键值对存储数据,键必须是不可变类型。示例如下:

python 复制代码
my_dict = {'name': 'Alice', 'age': 30}
# 添加或修改键值对
my_dict['city'] = 'New York'
print(my_dict)  
# 获取值
print(my_dict['name'])  
# 删除键值对
del my_dict['age']
print(my_dict)  
# 遍历字典
for key, value in my_dict.items():
    print(key, value)  

字典推导式可用于创建字典:

python 复制代码
new_dict = {num: num ** 2 for num in range(1, 4)}
print(new_dict)  

五、遍历技巧

5.1 字典遍历

使用items()方法可同时获取字典的键和值:

python 复制代码
my_dict = {'one': 1, 'two': 2, 'three': 3}
for key, value in my_dict.items():
    print(key, value)  

5.2 序列遍历

enumerate()函数可同时获取序列的索引和值:

python 复制代码
my_list = ['apple', 'banana', 'cherry']
for index, item in enumerate(my_list):
    print(index, item)  

5.3 多序列遍历

zip()函数可同时遍历多个序列:

python 复制代码
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
for num, char in zip(list1, list2):
    print(num, char)  

5.4 反向与排序遍历

reversed()函数用于反向遍历序列,sorted()函数用于排序遍历:

python 复制代码
my_list = [5, 3, 1, 4, 2]
for num in reversed(my_list):
    print(num)  
for num in sorted(my_list):
    print(num)  

六、总结

Python3 提供了丰富的数据结构,每种都有其独特的特性和适用场景。列表灵活可变,适用于需要频繁修改数据的场景;元组不可变,适合存储固定数据;集合用于去重和关系测试;字典以键值对存储,便于快速查找。掌握这些数据结构及其操作方法,以及各种遍历技巧,能帮助我们编写出更高效、简洁的 Python 代码。在实际编程中,应根据具体需求选择合适的数据结构,充分发挥它们的优势。希望这篇博客能帮助你系统复习 Python3 的数据结构知识,在编程实践中灵活运用。

相关推荐
我命由我123457 分钟前
Android 广播 - 组件通信
android·java·开发语言·android studio·android jetpack·android-studio·android runtime
前端 贾公子9 分钟前
LangGraph == 图的状态(State)管理 (中)
开发语言·数据库·python
李福春22 分钟前
斗破Google ADK Java苍穹-第2境斗者-凝旋筑基-Java环境
java·开发语言·gemini·llmagent·深圳同盟·腾讯云架构师技术同盟·adk java
众壹能源科技28 分钟前
边缘设备 OTA 为什么要采用灰度发布
大数据
JingliAlex39 分钟前
企业微信自动回复的话术怎么过审?三级审核流程的搭法
大数据·html·企业微信
the局外人40 分钟前
FastAPI中jwt的基本使用与实践
后端·python·fastapi
CCblandy1 小时前
Airllm 大模型本地化部署与高效推理应用指南
大数据·网络·人工智能
workflower1 小时前
手术机器人市场发展阶段
大数据·人工智能·机器人·云计算·无人机
老王爱玩车1 小时前
预处理详解
c语言·开发语言·学习
mklpo1471 小时前
为不支持sse4.2命令集的老旧设备制作Win11 26H2系统镜像,2026-10-11。
运维·windows·python