量化交易入门(十一)Python开发-数据结构

Python提供了几种内置的数据结构,可以用来存储和组织数据。以下是Python中常见的数据结构:列表,元组,字典,集合,字符串,栈,队列,树,图。我们将介绍这些数据结构,并举例说明。

  1. 列表(List):
  • 列表是一个有序的、可变的序列,可以存储不同类型的元素。
  • 使用方括号[]来定义列表,元素之间用逗号分隔。
fruits = ['apple', 'banana', 'orange', 'grape']
print(fruits)  # 输出: ['apple', 'banana', 'orange', 'grape']
  1. 元组(Tuple):
  • 元组是一个有序的、不可变的序列,可以存储不同类型的元素。
  • 使用小括号()来定义元组,元素之间用逗号分隔。
point = (3, 4)
print(point)  # 输出: (3, 4)
  1. 字典(Dictionary):
  • 字典是一个无序的、可变的键值对集合。
  • 使用大括号{}来定义字典,每个键值对用冒号:分隔,键值对之间用逗号分隔。
person = {'name': 'John', 'age': 25, 'city': 'New York'}
print(person)  # 输出: {'name': 'John', 'age': 25, 'city': 'New York'}
  1. 集合(Set):
  • 集合是一个无序的、可变的、不允许重复元素的集合。
  • 使用大括号{}或set()函数来定义集合,元素之间用逗号分隔。
numbers = {1, 2, 3, 4, 5}
print(numbers)  # 输出: {1, 2, 3, 4, 5}
  1. 字符串(String):
  • 字符串是一个有序的、不可变的字符序列。
  • 使用单引号''或双引号""来定义字符串。
message = 'Hello, World!'
print(message)  # 输出: Hello, World!
  1. 栈(Stack):
  • 栈是一种后进先出(LIFO)的数据结构。
  • 可以使用列表来模拟栈,使用append()方法添加元素,使用pop()方法移除并返回最后一个元素。
stack = [1, 2, 3]
stack.append(4)
stack.append(5)
print(stack)  # 输出: [1, 2, 3, 4, 5]
item = stack.pop()
print(item)  # 输出: 5
print(stack)  # 输出: [1, 2, 3, 4]
  1. 队列(Queue):
  • 队列是一种先进先出(FIFO)的数据结构。
  • 可以使用列表来模拟队列,使用append()方法添加元素,使用pop(0)方法移除并返回第一个元素。
  • Python提供了queue模块,其中的Queue类实现了队列的功能。
from queue import Queuequeue = Queue()
queue.put(1)
queue.put(2)
queue.put(3)
print(queue.get())  # 输出: 1
print(queue.get())  # 输出: 2
print(queue.get())  # 输出: 3
  1. 树(Tree):

树是一种层次结构的数据结构,由节点(Node)和边(Edge)组成。树具有以下特点:

  • 树有一个特殊的节点称为根节点(Root Node),它没有父节点。
  • 除了根节点外,每个节点都有且仅有一个父节点。
  • 从根节点到任意节点的路径是唯一的。
  • 树可以递归地定义为子树的集合,每个子树也是一棵树。

常见的树的类型包括:

  • 二叉树(Binary Tree):每个节点最多有两个子节点,称为左子节点和右子节点。
  • 二叉搜索树(Binary Search Tree):二叉树的一种,满足左子树的所有节点的值小于根节点,右子树的所有节点的值大于根节点。
  • 平衡二叉树(AVL Tree):二叉搜索树的一种,满足左子树和右子树的高度差不超过1。
  • 红黑树(Red-Black Tree):平衡二叉树的一种,通过引入颜色属性来维护树的平衡性。

下面是一个二叉树的例子:

class TreeNode:def __init__(self, value):self.val = valueself.left = Noneself.right = Noneroot = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
  1. 图(Graph):

图是一种由节点(Node)和边(Edge)组成的数据结构,用于表示对象之间的关系。图可以是有向的(Directed Graph)或无向的(Undirected Graph)。图具有以下特点:

  • 图由一组节点(顶点)和一组边组成。
  • 边连接两个节点,表示它们之间的关系。
  • 有向图中的边有方向,表示从一个节点到另一个节点的关系。
  • 无向图中的边没有方向,表示两个节点之间的双向关系。

图可以用邻接矩阵(Adjacency Matrix)或邻接表(Adjacency List)来表示:

  • 邻接矩阵:使用二维数组表示图,如果节点i和节点j之间有边,则matrix[i][j] = 1,否则为0。
  • 邻接表:使用列表或字典表示图,每个节点都有一个列表或字典,存储与之相连的节点。

下面是一个使用邻接表表示无向图的完整例子:

def dfs(graph, start, visited=None):if visited is None:visited = set()visited.add(start)print(start, end=' ')for neighbor in graph[start]:if neighbor not in visited:dfs(graph, neighbor, visited)# 创建无向图
graph = {'A': ['B', 'C'],'B': ['A', 'D', 'E'],'C': ['A', 'F'],'D': ['B'],'E': ['B', 'F'],'F': ['C', 'E']
}# 深度优先搜索遍历
print("DFS traversal:")
dfs(graph, 'A')  # 输出: A B D E F Cprint("\n")def bfs(graph, start):visited = set()queue = [start]visited.add(start)while queue:vertex = queue.pop(0)print(vertex, end=' ')for neighbor in graph[vertex]:if neighbor not in visited:queue.append(neighbor)visited.add(neighbor)# 广度优先搜索遍历
print("BFS traversal:")
bfs(graph, 'A')  # 输出: A B C D E F

在这个例子中,我们使用字典来表示无向图。字典的键表示节点,对应的值是一个列表,存储与该节点相连的其他节点。

我们定义了两个遍历图的函数:

  1. dfs(graph, start, visited=None):深度优先搜索遍历

graph:表示图的邻接表

start:表示开始遍历的起始节点

visited:表示已访问过的节点集合,默认为None

  1. 函数使用递归的方式遍历图,先访问起始节点,然后递归访问其未访问过的相邻节点。

bfs(graph, start):广度优先搜索遍历

graph:表示图的邻接表

start:表示开始遍历的起始节点

  1. 函数使用队列来实现广度优先搜索,先将起始节点加入队列,然后不断取出队首节点,访问其未访问过的相邻节点,并将它们加入队列,直到队列为空。

在示例代码中,我们创建了一个包含6个节点的无向图,并分别使用深度优先搜索和广度优先搜索对图进行遍历。

深度优先搜索的输出结果为:A B D E F C
广度优先搜索的输出结果为:A B C D E F

这个例子展示了如何使用邻接表表示无向图,以及如何使用深度优先搜索和广度优先搜索对图进行遍历。

示例代码地址:
https://github.com/gzmusem/QuantExamples/tree/main/Examples07

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用JMeter从JSON响应的URL参数中提取特定值

在使用Apache JMeter进行API测试时,我们经常需要从JSON格式的响应中提取特定字段的值。这可以通过使用JMeter内置的JSON提取器和正则表达式提取器来完成。以下是一个具体的例子,展示了如何从一个JSON响应中提取rowId的值,同时处理字符串终止符…

C#使用Poll/Select实现多路I/O复用

在实际的应用中,如果全部采用异步的操作来,会增加代码的复杂程度,某些时候使用Poll/Select来实现单线程多路的I/O复用会更合适一些 一、Poll 原型函数 public bool Poll ( int microSeconds, SelectMode mode ) 1:客户端 pri…

web服务架构

1 Web服务器(如Nginx、Apache等)和Web应用框架(如Flask、Django等) Web服务器(如Nginx、Apache等)和Web应用框架(如Flask、Django等)在Web应用开发和部署中扮演着不同的角色&#xf…

python turtle库简单应用题

三角形 import turtle for i in range(3):turtle.seth(i * 120)turtle.fd(100) turtle.done()矩形 import turtle angle 90 for x in range(4):turtle.fd(100)turtle.seth(angle)angle 90 turtle.done()五边形 import turtle angle 360/5 for x in range(5):turtle.fd(10…

软考中级 --网络工程师真题试卷 2023下半年

在EIGRP协议中,某个路由器收到了两条路径到达目标网络,路径1的带宽为100Mbps,延迟2ms,路径2的带宽为50Mbps,迟为4ms,如果EIGRP使用带宽和延迟的综合度量标准,那么该路由器选择的最佳路径是(D)。…

Codeforces Round 930 (Div. 2)(A,B,C,D)

比赛链接 C是个交互,D是个前缀和加二分。D还是很难写的。 A. Shuffle Party 题意: 您将得到一个数组 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​ 。最初,每个 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n 对应 a i i a_ii…

你用对const了吗?C++中const小结

const 修饰普通变量 表示变量的值不能被改变。下面两条语句(第2行和第3行)表示的意思一致。 int a; const int ca 42; //int const ca 42;const 修饰指针 指向常量的指针不能改变其指对象的值。第 5 行代码是错误的。 int a 42;const int * ip &a; int const * ipp…

win10 禁止谷歌浏览器自动更新(操作贼简单)

禁止谷歌浏览器自动更新 (1)修改 "C:\Windows\System32\drivers\etc\hosts 文件,在最后增加 127.0.0.1 update.googleapis.com(2)保存后,winr 快捷键,输入cmd ,打开命令行 &am…

RK3588 rknpu2及rknn-toolkit2使用说明

RKNN模型推理共有四种方式: 第一种是借助RKNN-Toolkit2的功能在模拟NPU上运行RKNN模型并获取推理结果(在PC端) 第二种是借助RKNN-Toolkit2的功能, 将板子与PC连接,将RKNN模型分发到指定的NPU设备进行推理并获取推理结果&#xff0…

AJAX踩坑指南(知识点补充)

JWT JSON Web Token是目前最为流行的跨域认证解决方案 如何获取:在使用JWT身份验证中,当用户使用其凭据成功登录时,将返回JSON Web Token(令牌) Token本质就是一个包含了信息的字符串 如何获取Token:登录成功之后,服务…

Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 前言 解决跨域问题方案 1.Spring Boot 中解决跨域 1.1 通过注解跨域 1.2 通…

什么是RabbitMQ的死信队列

RabbitMQ的死信队列(Dead Letter Queue,简称DLQ)是一种用于处理消息失败或无法路由的消息的机制。它允许将无法被正常消费的消息重新路由到另一个队列,以便稍后进行进一步处理、分析或排查问题。 当消息对立里面的消息出现以下几…

C语言经典面试题目(二十七)

1、什么是头文件?为什么在C语言中需要使用头文件? 头文件是C语言中的一种文件,通常以.h为文件扩展名,用于存放函数声明、宏定义、结构体声明等。在C语言中,头文件的主要作用是将程序的接口与实现分离开来,…

大数据的实时计算和离线计算你理解吗?

不管是实时计算还是离线计算,都有着同样的业务目标,那就是根据业务要求把数据源计算处理成业务需要的直接可用的数据结果。 如果把数据源比作是水龙头里的水,把数据计算比作是生产纯净水的过程;那么实时计算就是用一根水管接在水龙…

css的text-shadow详解

CSS的text-shadow属性用于为文本添加阴影效果,以增强文本的立体感和印刷品质感。该属性可以接受多个值,每个值通过空格分隔,以定义阴影的各个方面。以下是text-shadow属性的详细介绍: 阴影颜色 (Color): 这是阴影的颜色值。它可以…

深度学习基础之《TensorFlow框架(10)—案例:实现线性回归(2)》

增加其他功能 一、增加变量显示 1、目的:在TensorBoard当中观察模型的参数、损失值等变量值的变化 2、收集变量 不同的变量要用不同的方式收集 (1)tf.summary.scalar(name, tensor) 收集对于损失函数和准确率等单值变量,name为…

ES6生成器(Generator)

一、function* 概念简介:function* - JavaScript | MDN (mozilla.org) function* 声明创建一个绑定到给定名称的新生成器函数。生成器函数可以退出,并在稍后重新进入,其上下文(变量绑定)会在重新进入时保存。 1.1 y…

Spring Boot 自动化单元测试类的编写过程

前言 Web环境模拟测试 企业开发不仅要保障业务层与数据层的功能安全有效,也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的,并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…

LabVIEW高效光伏数据监控与管理系统

LabVIEW高效光伏数据监控与管理系统 随着新能源技术的发展,光伏发电系统作为一种清洁、高效的能源获取方式受到了广泛的关注。但是,由于光伏发电的特性受到多种环境因素的影响,其运行效率和安全性成为了关键问题。因此,开发一个高…

K8S--SpringCloud应用整合Nacos实战

原文网址:K8S--SpringCloud应用整合Nacos实战-CSDN博客 简介 本文介绍K8S部署SpringCloud应用整合Nacos实战。 本文是将原来的SpringCloud项目(闪速优选)迁移到K8S上,一行代码都不需要改动。用K8S运行Nacos、Gateway、SpringCl…