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

Python 数据结构速成教程

在 Python 中,数据结构是组织和存储数据的方式,不同的数据结构适用于不同的场景。下面将深入介绍 Python 中常见的数据结构,包括它们的应用场景、优势和劣势。

1. 列表(List)

定义和基本操作

列表是 Python 中最常用的数据结构之一,它是一个可变的、有序的元素集合。列表可以包含不同类型的元素,使用方括号 [] 来定义。

 

# 创建一个列表
my_list = [1, 2, 3, 'apple', 'banana']

# 访问列表元素
print(my_list[0])  # 输出: 1

# 修改列表元素
my_list[1] = 20
print(my_list)  # 输出: [1, 20, 3, 'apple', 'banana']

# 添加元素
my_list.append('cherry')
print(my_list)  # 输出: [1, 20, 3, 'apple', 'banana', 'cherry']

# 删除元素
del my_list[2]
print(my_list)  # 输出: [1, 20, 'apple', 'banana', 'cherry']

应用场景

  • 数据收集:当需要收集一系列数据时,列表非常有用。例如,收集用户输入的一组数字。
  • 动态数据:如果数据的数量和内容会动态变化,列表可以方便地进行添加、删除和修改操作。

优势

  • 灵活性:可以包含不同类型的元素,并且可以动态调整大小。
  • 易于操作:提供了丰富的方法,如 append()extend()remove() 等,方便对列表进行操作。

劣势

  • 性能问题:在列表的开头插入或删除元素的效率较低,因为需要移动后续的所有元素。
  • 内存开销:列表需要额外的内存来存储元素的引用和列表的元数据。

2. 元组(Tuple)

定义和基本操作

元组是一个不可变的、有序的元素集合,使用圆括号 () 来定义。 

# 创建一个元组
my_tuple = (1, 2, 3, 'apple', 'banana')

# 访问元组元素
print(my_tuple[0])  # 输出: 1

# 元组是不可变的,以下操作会报错
# my_tuple[1] = 20  # TypeError: 'tuple' object does not support item assignment

应用场景

  • 数据保护:当需要确保数据不被修改时,元组是一个很好的选择。例如,函数的返回值可以使用元组来保证数据的安全性。
  • 作为字典的键:由于元组是不可变的,它可以作为字典的键,而列表则不行。

优势

  • 不可变性:保证数据的安全性,避免意外修改。
  • 性能优势:元组的创建和访问速度比列表快,因为不需要额外的内存来处理可变操作。

劣势

  • 不灵活:一旦创建,元组的内容就不能修改,不适合需要动态变化的数据。

 3. 集合(Set)

定义和基本操作

集合是一个无序的、唯一的元素集合,使用花括号 {} 或 set() 函数来定义。

# 创建一个集合
my_set = {1, 2, 3, 3, 4}  # 重复的元素会被自动去除
print(my_set)  # 输出: {1, 2, 3, 4}

# 添加元素
my_set.add(5)
print(my_set)  # 输出: {1, 2, 3, 4, 5}

# 删除元素
my_set.remove(3)
print(my_set)  # 输出: {1, 2, 4, 5}

# 集合运算
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1.union(set2))  # 并集,输出: {1, 2, 3, 4, 5}
print(set1.intersection(set2))  # 交集,输出: {3}
print(set1.difference(set2))  # 差集,输出: {1, 2}

应用场景

  • 去重:当需要去除列表中的重复元素时,可以将列表转换为集合。
  • 集合运算:进行交集、并集、差集等运算,例如在数据库查询中筛选出符合条件的数据。

优势

  • 唯一性:自动去除重复元素,确保数据的唯一性。
  • 高效的查找:集合使用哈希表实现,查找元素的时间复杂度为 O。

劣势

  • 无序性:集合是无序的,不能通过索引访问元素。
  • 只能存储可哈希的元素:集合中的元素必须是可哈希的,因此不能包含列表等可变对象。

 4. 字典(Dictionary)

定义和基本操作

字典是一个无序的键值对集合,使用花括号 {} 来定义,每个键值对用冒号 : 分隔。

# 创建一个字典
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

# 访问字典元素
print(my_dict['name'])  # 输出: John

# 修改字典元素
my_dict['age'] = 31
print(my_dict)  # 输出: {'name': 'John', 'age': 31, 'city': 'New York'}

# 添加元素
my_dict['job'] = 'Engineer'
print(my_dict)  # 输出: {'name': 'John', 'age': 31, 'city': 'New York', 'job': 'Engineer'}

# 删除元素
del my_dict['city']
print(my_dict)  # 输出: {'name': 'John', 'age': 31, 'job': 'Engineer'}

 应用场景

  • 数据映射:当需要根据某个键来查找对应的值时,字典非常有用。例如,存储用户信息,通过用户 ID 查找用户的详细信息。
  • 统计频率:可以使用字典来统计列表中每个元素的出现频率。

优势

  • 高效的查找:字典使用哈希表实现,查找元素的时间复杂度为 O。
  • 灵活的键值对:键可以是任意不可变类型,值可以是任意类型。

劣势

  • 内存开销:字典需要额外的内存来存储哈希表,因此对于大量数据,内存开销较大。
  • 无序性:Python 3.6 之前,字典是无序的,虽然 3.6 及以后版本保证了插入顺序,但仍然不适合需要有序访问的场景。 

总结

数据结构应用场景优势劣势
列表(List)数据收集、动态数据灵活性高、易于操作开头插入删除效率低、内存开销大
元组(Tuple)数据保护、作为字典键不可变性、性能优势不灵活
集合(Set)去重、集合运算唯一性、高效查找无序性、只能存储可哈希元素
字典(Dictionary)数据映射、统计频率高效查找、灵活键值对内存开销大、无序性(早期版本)

 在实际编程中,根据具体的需求选择合适的数据结构可以提高代码的效率和可读性。


http://www.kler.cn/a/541694.html

相关文章:

  • 跨平台开发利器:UniApp 全面解析与实践指南
  • 从零到一:基于Rook构建云原生Ceph存储的全面指南(上)
  • pip3命令全解析:Python3包管理工具的详细使用指南
  • openAI官方prompt技巧(一)
  • DeepSeek神经网络:技术架构与实现原理探析
  • CSS 相关知识
  • 西安电子科技大学考研成绩2月24号即可查询,成绩查询入口:
  • 基于单片机的并联均流电源设计(论文+源码)
  • 微信小程序案例3——仿香哈菜谱微信小程序
  • linux统计文件夹下有多少个.rst文件行数小于4行
  • 正式开启Django之旅
  • 25年重庆省考报名流程详细教程
  • 11.swagger使用
  • 在win11下配置QT存在问题
  • 使用 Notepad++ 编辑显示 MarkDown
  • c++标准模板库(stl)vector和String
  • 项目场景拷打
  • 人工智能浪潮下脑力劳动的变革与重塑:挑战、机遇与应对策略
  • ESM2和ESM fold:语言模型进行原子级结构预测
  • 解决 DeepSeek 官网服务器繁忙的实用方案
  • 在 UniApp 中封装并连接 WebSocket 及重连机制实现
  • Flutter编译问题记录
  • 探索智能新边疆 —— DeepSeek与蓝耘智算平台:云端上的AI助手
  • 网络安全的正确认知
  • TensorRT【详解】
  • mmdetection3d环境部署