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

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)数据映射、统计频率高效查找、灵活键值对内存开销大、无序性(早期版本)

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

相关文章:

  • 数据结构:图论入门
  • 深入理解 C# 顶级语句:告别 Main 方法
  • Java Swing-5.jar 使用 jpackage 打包成 windows 可安装应用(exe,msi,免安装版exe)
  • 51单片机介绍
  • c#展示网页并获取网页上触发按钮的值进行系统业务逻辑处理
  • 详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME
  • 【个人开发】cuda12.6安装vllm安装实践【内含踩坑经验】
  • 机器学习-1:线性回归
  • WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建
  • 计算机毕业设计——Springboot的旅游管理
  • Flask Web开发的重要概念和示例
  • Node.js中Express框架使用指南:从入门到企业级实践
  • 32单片机学习记录1之GPIO
  • Python实现决策树(Decision Tree)算法
  • 细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性
  • haproxy详解笔记
  • 如何在Java EE中使用标签库?
  • 【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面
  • 基于Kotlin中Flow扩展重试方法
  • 【代码随想录】第八章-贪心算法
  • 房山广州网站建设/新网站排名优化怎么做
  • wordpress 百度地图插件/seo优化排名公司
  • 周口市建设职工培训中心网站/收录优美图片官网
  • 中华人民共和国主席列表/seo页面内容优化
  • 手机网站seo教程/宁德seo推广
  • 做网站后台怎么搭建/域名注册服务网站