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 的数据结构知识,在编程实践中灵活运用。

相关推荐
不会飞的鲨鱼23 分钟前
Scrapy框架之 中间件的使用
python·scrapy·中间件
星图云24 分钟前
金融风控的“天眼”:遥感技术的创新应用
大数据·人工智能
灏瀚星空26 分钟前
量化交易之数学与统计学基础2.4——线性代数与矩阵运算 | 矩阵分解
笔记·python·线性代数·信息可视化·矩阵
言之。1 小时前
Go语言中的错误处理
开发语言·后端·golang
noedn1 小时前
图像畸变-径向切向畸变实时图像RTSP推流
python·ffmpeg
Kay_Liang1 小时前
探究排序算法的奥秘(下):快速排序、归并排序、堆排序
java·数据结构·c++·python·算法·排序算法
这儿有一堆花1 小时前
JavaScript 代码搜索框
开发语言·javascript·ecmascript
禺垣1 小时前
AdaBoost算法的原理及Python实现
人工智能·python·算法·机器学习·数据挖掘·adaboost·集成学习
forestsea2 小时前
Java Class类文件结构
java·开发语言
月忆3642 小时前
Go的GC垃圾回收
大数据