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

Python中常见数据结构

文章目录

      • 1. 列表(List)
      • 2. 元组(Tuple)
      • 3. 字典(Dictionary)
      • 4. 集合(Set)
      • 5. 数组(Array)
      • 6. 栈(Stack)
      • 7. 队列(Queue)
      • 8. 链表(Linked List)
      • 9. 树(Tree)
      • 10. 图(Graph)

下面是对Python中常见数据结构的详细介绍,包括它们的特性、优缺点和使用场景,并提供示例代码。

1. 列表(List)

特性

  • 有序集合,可以包含重复元素。
  • 支持索引、切片和各种操作。

优缺点

  • 优点:动态大小,易于操作。
  • 缺点:查找时间复杂度为O(n),插入和删除时可能需要移动元素。

使用场景

  • 存储有序的元素,适合需要频繁修改或访问的场景。

示例

# 创建列表
my_list = [1, 2, 3, 4, 5]# 添加元素
my_list.append(6)# 删除元素
my_list.remove(3)# 访问元素
print(my_list[0])  # 输出 1# 切片
print(my_list[1:4])  # 输出 [2, 4, 5]

2. 元组(Tuple)

特性

  • 有序集合,元素不可更改(不可变)。
  • 可以包含重复元素。

优缺点

  • 优点:占用内存小,支持哈希,可以用作字典的键。
  • 缺点:一旦创建,不能更改其内容。

使用场景

  • 当需要一个固定集合的元素,可以使用元组。例如,返回多个值时。

示例

# 创建元组
my_tuple = (1, 2, 3)# 访问元素
print(my_tuple[1])  # 输出 2# 元组的不可变性
# my_tuple[1] = 4  # 会报错

3. 字典(Dictionary)

特性

  • 无序的键值对集合,键(key)必须是不可变类型。
  • 支持快速查找。

优缺点

  • 优点:快速查找,灵活的结构。
  • 缺点:内存占用相对较高。

使用场景

  • 存储相关联的数据,比如用户信息(用户名和用户ID)。

示例

# 创建字典
my_dict = {'name': 'Alice', 'age': 30}# 添加条目
my_dict['city'] = 'New York'# 访问元素
print(my_dict['name'])  # 输出 Alice# 删除条目
del my_dict['age']

4. 集合(Set)

特性

  • 无序的唯一元素集合,不能包含重复元素。

优缺点

  • 优点:快速查找、插入和删除。
  • 缺点:内部实现需要更多内存。

使用场景

  • 去重、集合运算(交集、并集等)。

示例

# 创建集合
my_set = {1, 2, 3, 4}# 添加元素
my_set.add(5)# 删除元素
my_set.remove(2)# 集合运算
other_set = {3, 4, 5, 6}
print(my_set & other_set)  # 输出 {3, 4, 5}(交集)

5. 数组(Array)

Python中的数组可以通过array模块实现,但通常使用NumPy中的数组来处理更高级的数学和科学计算。

特性

  • 可以存储大量元素,支持高效的矩阵运算。

优缺点

  • 优点:提供高效的内存使用和操作速度。
  • 缺点:需要额外的库,较少使用基本Python库。

使用场景

  • 数学计算、科学研究。

示例(使用numpy)

import numpy as np# 创建数组
my_array = np.array([1, 2, 3, 4])# 数组运算
my_array = my_array * 2  # 每个元素乘以2print(my_array)  # 输出 [2 4 6 8]

6. 栈(Stack)

栈是一种后进先出(LIFO)的数据结构。

特性

  • 使用append()和pop()方法实现。

优缺点

  • 优点:简单,使用方便。
  • 缺点:只允许从一端插入和删除。

使用场景

  • 函数调用、括号匹配。

示例

stack = []# 压入
stack.append(1)
stack.append(2)# 弹出
top = stack.pop()  # top = 2

7. 队列(Queue)

队列是一种先进先出(FIFO)的数据结构。

特性

  • 使用collections.deque实现。

优缺点

  • 优点:快速的插入和删除。
  • 缺点:对随机访问不友好。

使用场景

  • 任务调度、宽度优先搜索。

示例

from collections import dequequeue = deque()# 入队
queue.append(1)
queue.append(2)# 出队
first = queue.popleft()  # first = 1

8. 链表(Linked List)

链表是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。

特性

  • 动态大小,效率高。

优缺点

  • 优点:插入和删除速度快。
  • 缺点:需要额外的存储空间,访问时从头遍历。

使用场景

  • 数据插入和删除频繁的情况。

示例

class Node:def __init__(self, data):self.data = dataself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef append(self, data):if not self.head:self.head = Node(data)returncurrent = self.headwhile current.next:current = current.nextcurrent.next = Node(data)# 使用链表
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)

9. 树(Tree)

树是一种层次数据结构,由节点组成,每个节点有零或多个子节点。

特性

  • 非线性结构,便于表示层次关系。

优缺点

  • 优点:高效的查找、插入和删除。
  • 缺点:实现复杂,树的平衡需求。

使用场景

  • 文件系统、数据库索引。

示例(简单的二叉树)

class TreeNode:def __init__(self, value):self.value = valueself.left = Noneself.right = None# 构建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)

10. 图(Graph)

图是一种由节点和边组成的数据结构,用于表示对象及对象之间的关系。

特性

  • 可以是有向图或无向图。

优缺点

  • 优点:可以表示复杂的关系。
  • 缺点:处理和实现复杂性高。

使用场景

  • 网络连接图、推荐系统。

示例(邻接表)

class Graph:def __init__(self):self.graph = {}def add_edge(self, u, v):if u not in self.graph:self.graph[u] = []self.graph[u].append(v)# 使用图
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)

这些数据结构各有特点,适用于不同的场景。选择合适的数据结构对于解决问题和优化代码性能至关重要。


http://www.mrgr.cn/news/6555.html

相关文章:

  • 为什么MCU中需要ADC模块
  • 飞书操作—学习笔记
  • SpringBoot整合RabbitMQ
  • Vue处理表格长字段显示问题
  • 八股(3)——计网
  • Android studio的replace替换
  • 十五、OpenCVSharp实现相机标定
  • AI绘画工具 Stable Diffusion【插画转绘】:建筑 | 风景| 人像照片的插画转绘制作教程,照片秒变插画风格图片!
  • gogs运行报“gogs“: cannot run executable found relative to current directory
  • ECharts tooltip默认html样式,保留样式只对数值格式化
  • Python 爬虫框架
  • 如何通过rsync+sersync 实现同步备份
  • 并发知识笔记
  • Spring父子容器
  • HarmonyOS 地图服务:深度解析其丰富功能与精准导航实力
  • kafka的一个有趣问题(BUG)
  • VS2017编译osg3.6.0和osgearth2.10
  • Java SpringBoot+Vue实战教程:如何一步步实现Cosplay论坛设计与实现
  • 自动生成依赖清单:pipreqs,Python项目的救星
  • Onnx使用预训练的 ResNet18 模型对输入图像进行分类,并将分类结果显示在图像上