Python中常见数据结构

news/2024/9/23 8:04:48/

文章目录

      • 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),插入和删除时可能需要移动元素。

使用场景

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

示例

python"># 创建列表
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)

特性

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

优缺点

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

使用场景

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

示例

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

3. 字典(Dictionary)

特性

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

优缺点

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

使用场景

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

示例

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

4. 集合(Set)

特性

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

优缺点

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

使用场景

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

示例

python"># 创建集合
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)

python">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()方法实现。

优缺点

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

使用场景

  • 函数调用、括号匹配。

示例

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

7. 队列(Queue)

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

特性

  • 使用collections.deque实现。

优缺点

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

使用场景

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

示例

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

8. 链表(Linked List)

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

特性

  • 动态大小,效率高。

优缺点

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

使用场景

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

示例

python">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)

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

特性

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

优缺点

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

使用场景

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

示例(简单的二叉树)

python">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)

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

特性

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

优缺点

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

使用场景

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

示例(邻接表)

python">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.ppmy.cn/news/1514768.html

相关文章

vue vite创建项目步骤

1. 创建vue项目 node版本需18以上 不然报错 npm init vuelatest2. 项目配置 配置项目的icon配置项目的标题配置jsconfig.json 3. 项目目录结构划分 4.css样式的重置 npm install normalize.cssreset.css html {line-height: 1.2; }body, h1, h2, h3, h4, ul, li {padding…

linux28学习 进程结束演示

signal.c #include <stdio.h> #include <signal.h> #include<unistd.h> void handler(int sig) { printf("catch a sig : %d\n", sig); } int main() { while(1){sleep(1);printf("进程号&#xff1a;%d\n",getpid());}return 0; }…

C++ 设计模式——单例模式

单例模式 C 设计模式——单例模式1. 单例模式的基本概念与实现2. 多线程环境中的问题3. 内存管理问题1. 内存泄漏风险2. 自动释放策略3. 垃圾回收机制4. 嵌套类与内存管理 4. UML 图UML 图解析 优缺点适用场景总结 C 设计模式——单例模式 单例模式&#xff08;Singleton Patt…

MySQL:this is incompatible with sql_mode=only_full_group_by

错误场景 有时候&#xff0c;遇到数据库重复数据&#xff0c;需要将数据进行分组&#xff0c;并取出其中一条来展示&#xff0c;这时就需要用到group by语句。 但是&#xff0c;如果mysql是高版本&#xff0c;当执行group by时&#xff0c;select的字段不属于group by的字段的…

Windows RPC 运行时中的严重远程代码执行漏洞

微软于 2022 年 4 月的补丁星期二发布了针对各种组件中一百多个新漏洞的补丁。在 Windows 远程过程调用 (RPC) 运行时中发现并修补了三个严重漏洞: CVE-2022-24492和CVE-2022-24528 (由 Cyber KunLun 的 Yuki Chen 发现)CVE-2022-26809(由 Kunlun 的 BugHunter010 发现)在…

HTTP/2:网络传输的革新与优化

摘要 HTTP/2是超文本传输协议&#xff08;HTTP&#xff09;的第二个主要版本&#xff0c;旨在解决HTTP/1.x版本中存在的一些性能问题&#xff0c;如队头阻塞、连接复用不足等。本文将详细介绍HTTP/2的基本概念、特性、优化机制以及如何通过这些机制改善网络传输效率。 1. HTT…

c++题目_P1168 中位数

# 中位数 ## 题目描述 给定一个长度为 $N$ 的非负整数序列 $A$&#xff0c;对于前奇数项求中位数。 ## 输入格式 第一行一个正整数 $N$。 第二行 $N$ 个正整数 $A_{1\dots N}$。 ## 输出格式 共 $\lfloor \frac{N 1}2\rfloor$ 行&#xff0c;第 $i$ 行为 $A_{1\dots 2i…

Spring Boot中的过滤器与拦截器实战:实现用户认证与资源访问控制

源访问控制 概述 在构建Web应用时&#xff0c;我们经常需要实现诸如用户认证、资源访问控制等功能。Spring Boot 提供了多种工具来帮助开发者轻松实现这些需求。本文将介绍如何使用Spring Boot 3.x中的过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&…