当前位置: 首页 > news >正文

Python3(19)数据结构

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

一、列表(List)

1.1 列表的特性与常用方法

        列表是 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 列表可方便地实现栈操作。示例如下:

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是更优选择,示例如下:

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)  

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

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 列表推导式

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

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 的矩阵转置:

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语句可根据索引删除列表元素或切片,还能删除整个列表。例如:

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)

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

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

元组也支持嵌套:

nested_tuple = ((1, 2), (3, 4))
print(nested_tuple[1][0])  

三、集合(Set)

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

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)

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

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)  

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

new_dict = {num: num ** 2 for num in range(1, 4)}
print(new_dict)  

五、遍历技巧

5.1 字典遍历

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

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

5.2 序列遍历

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

my_list = ['apple', 'banana', 'cherry']
for index, item in enumerate(my_list):print(index, item)  

5.3 多序列遍历

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

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

5.4 反向与排序遍历

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

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

相关文章:

  • [SystemVerilog] Enum
  • UDP/TCP协议知识及相关机制
  • 【使用小皮面板 + WordPress 搭建本地网站教程】
  • 私有知识库 Coco AI 实战(五):打造 ES 新特性查询助手
  • 线上婚恋相亲小程序源码介绍
  • ES基本使用方式
  • 基于策略模式实现灵活可扩展的短信服务架构
  • 美团优选小程序 mtgsig 分析 mtgsig1.2
  • Vue3源码学习-提交限制
  • pytorch中的原地与非原地操作
  • 软件系统验收报告:功能、性能稳定性如何?数据导出卡顿咋回事?
  • GPU集群中的超节点
  • 【Hot 100】 148. 排序链表
  • AI Engine Kernel and GraphProgramming--知识分享1
  • 从有线到无线:冶炼工厂的高效转型
  • 视觉问答论文解析:《Skywork R1V2: Multimodal Hybrid Reinforcement Learning for Reasoning》
  • 数电发票整理:免费实用工具如何高效解析 XML 发票数据
  • 数据采集,埋点模型
  • 论文公式根据章节自动编号教程
  • 阿里云服务迁移实战: 06-切换DNS
  • 讲武谈兵|朝鲜“崔贤”号驱逐舰下水,朝版“宙斯盾”战力如何?
  • 从“长绳系日”特展看韩天衡求艺之路
  • 五一去哪玩?“时代交响”音乐会解锁艺术假期
  • 摩根大通任命杜峯为亚太区副主席,加码中国市场业务布局
  • 马上评丨准入壁垒越少,市场活力越足
  • 科学家为AI模型设置“防火墙”,以防止被不法分子滥用