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

Python实现数据结构的基础操作

目录

一、列表(List)

二、字典(Dictionary)

三、集合(Set)

四、链表的实现

五、队列和栈


   数据结构是计算机科学中非常重要的概念,它用于存储和组织数据以便有效地进行操作。Python作为一种功能强大且易于学习的编程语言,提供了许多内置的数据结构和相关操作。在本篇博客中,我们将介绍Python中常用的数据结构(如列表、字典、集合等)以及它们的基础操作方法,帮助读者理解和应用这些基本的数据结构。

一、列表(List)

列表是Python中最常用的数据结构之一,用于存储一系列元素。以下是一些常见的列表操作方法:

  • 创建列表:通过用方括号包围元素,并使用逗号分隔来创建一个列表。例如:my_list = [1, 2, 3, 4, 5]。
  • 访问元素:使用索引来访问列表中的特定元素。注意:索引从0开始。例如:print(my_list[0])将输出第一个元素。
  • 修改元素:可以通过索引来修改列表中的元素。例如:my_list[0] = 10将把列表中的第一个元素改为10。
  • 切片操作:通过切片操作,可以获取列表中的一部分元素。例如:print(my_list[1:3])将打印出索引1到2的元素。
  • 增加元素:使用append()方法可以在列表末尾添加一个元素。例如:my_list.append(6)将在列表末尾添加一个值为6的元素。
  • 删除元素:使用remove()方法可以删除列表中的指定元素。例如:my_list.remove(3)将删除列表中的元素3。
# 创建列表
my_list = [1, 2, 3, 4, 5]# 访问元素
print(my_list[0])  # 输出第一个元素# 修改元素
my_list[0] = 10  # 将列表中的第一个元素改为10# 切片操作
print(my_list[1:3])  # 打印索引1到2的元素# 增加元素
my_list.append(6)  # 在列表末尾添加一个值为6的元素# 删除元素
my_list.remove(3)  # 删除列表中的元素3

二、字典(Dictionary)

字典是一种通过键-值对存储数据的数据结构。以下是一些常见的字典操作方法:

  • 创建字典:使用花括号和冒号来创建一个字典。例如:my_dict = {"name": "John", "age": 30, "city": "New York"}。
  • 访问键值对:通过键来访问字典中的值。例如:print(my_dict["name"])将输出键"name"对应的值。
  • 修改值:可以通过指定键来修改字典中的值。例如:my_dict["age"] = 35将把键"age"对应的值改为35。
  • 添加键值对:可以使用新的键来添加新的键值对。例如:my_dict["gender"] = "Male"可以向字典中添加一个键"gender"及其对应的值"Male"。
  • 删除键值对:使用del关键字可以删除字典中的键值对。例如:del my_dict["city"]可以删除键"city"及其对应的值。

# 创建字典
my_dict = {"name": "John", "age": 30, "city": "New York"}# 访问键值对
print(my_dict["name"])  # 输出键"name"对应的值# 修改值
my_dict["age"] = 35  # 将键"age"对应的值改为35# 添加键值对
my_dict["gender"] = "Male"  # 向字典中添加一个键"gender"及其对应的值"Male"# 删除键值对
del my_dict["city"]  # 删除键"city"及其对应的值

三、集合(Set)

集合是一种无序且唯一的数据结构,用于存储一组不重复的元素。以下是一些常见的集合操作方法:

  • 创建集合:使用花括号或set()函数来创建一个集合。例如:my_set = {1, 2, 3, 4, 5}。
  • 添加元素:使用add()方法可以向集合中添加一个元素。例如:my_set.add(6)将在集合中添加一个值为6的元素。
  • 删除元素:使用remove()方法可以删除集合中的指定元素。例如:my_set.remove(3)将删除集合中的元素3。
  • 集合运算:可以对集合进行交集、并集、差集等运算。例如:set1.intersection(set2)将返回两个集合的交集。

# 创建集合
my_set = {1, 2, 3, 4, 5}# 添加元素
my_set.add(6)  # 向集合中添加一个值为6的元素# 删除元素
my_set.remove(3)  # 删除集合中的元素3# 集合运算
set1 = {1, 2, 3}
set2 = {2, 3, 4}intersection = set1.intersection(set2)  # 返回两个集合的交集

四、链表的实现

class Node:def __init__(self, value):self.value = valueself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef is_empty(self):return self.head is Nonedef append(self, value):new_node = Node(value)if self.is_empty():self.head = new_nodeelse:current = self.headwhile current.next is not None:current = current.nextcurrent.next = new_nodedef insert(self, value, position):if position < 0:raise ValueError("Invalid position")new_node = Node(value)if position == 0:new_node.next = self.headself.head = new_nodeelse:current = self.headprevious = Nonecount = 0while count < position:if current is None:raise IndexError("Index out of range")previous = currentcurrent = current.nextcount += 1previous.next = new_nodenew_node.next = currentdef delete(self, value):if self.is_empty():returnif self.head.value == value:self.head = self.head.nextreturncurrent = self.headprevious = Nonewhile current is not None:if current.value == value:previous.next = current.nextreturnprevious = currentcurrent = current.nextdef search(self, value):current = self.headwhile current is not None:if current.value == value:return Truecurrent = current.nextreturn Falsedef display(self):elements = []current = self.headwhile current is not None:elements.append(current.value)current = current.nextprint(elements)

这段代码实现了一个简单的链表(LinkedList)数据结构。链表由多个节点(Node)组成,每个节点包含一个值(value)和指向下一个节点的指针(next)。

  1. Node类:定义了表示链表节点的对象。

    • __init__(self, value):初始化节点对象,并接收一个值作为参数。
  2. LinkedList类:定义了整个链表的操作方法。

    • __init__(self):初始化链表对象,将头节点设置为None。
    • is_empty(self):判断链表是否为空,如果头节点为None,则表示链表为空,返回True;否则返回False。
    • append(self, value):在链表尾部插入一个新的节点,将新节点添加到链表的最后一个节点的后面。
    • insert(self, value, position):在指定位置插入一个新的节点,将新节点插入到指定位置的节点的前面。
    • delete(self, value):删除链表中第一个值等于给定值的节点。
    • search(self, value):在链表中搜索给定值,如果找到则返回True,否则返回False。
    • display(self):打印链表中的所有节点的值。

这个链表实现中还包含了一些额外的功能,例如对索引位置的处理、判空等。

使用示例:

# 创建链表对象
linked_list = LinkedList()# 判断链表是否为空
print(linked_list.is_empty())  # True# 向链表末尾添加元素
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)# 在指定位置插入元素
linked_list.insert(0, 0)
linked_list.insert(4, 4)# 删除指定元素
linked_list.delete(2)# 查找元素是否存在
print(linked_list.search(3))  # True# 显示链表中的元素
linked_list.display()  # [0, 1, 3, 4]

这是一个简单的链表实现示例、

五、队列和栈

要实现栈(Stack)和队列(Queue),我们可以使用Python中的列表来作为底层数据结构,并通过封装一些方法来实现相应的操作。

以下是一个简单的栈和队列实现示例:

栈(Stack):

class Stack:def __init__(self):self.stack = []def is_empty(self):return len(self.stack) == 0def push(self, item):self.stack.append(item)def pop(self):if self.is_empty():raise IndexError("Stack is empty")return self.stack.pop()def peek(self):if self.is_empty():raise IndexError("Stack is empty")return self.stack[-1]def size(self):return len(self.stack)

使用示例:

# 创建栈对象
stack = Stack()# 判断栈是否为空
print(stack.is_empty())  # True# 入栈
stack.push(1)
stack.push(2)
stack.push(3)# 出栈
print(stack.pop())  # 3# 查看栈顶元素
print(stack.peek())  # 2# 获取栈的大小
print(stack.size())  # 2

队列(Queue):

class Queue:def __init__(self):self.queue = []def is_empty(self):return len(self.queue) == 0def enqueue(self, item):self.queue.append(item)def dequeue(self):if self.is_empty():raise IndexError("Queue is empty")return self.queue.pop(0)def peek(self):if self.is_empty():raise IndexError("Queue is empty")return self.queue[0]def size(self):return len(self.queue)

使用示例:

# 创建队列对象
queue = Queue()# 判断队列是否为空
print(queue.is_empty())  # True# 入队
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)# 出队
print(queue.dequeue())  # 1# 查看队首元素
print(queue.peek())  # 2# 获取队列的大小
print(queue.size())  # 2

数据结构是计算机科学中非常重要的概念,用于存储和组织数据以便有效地进行操作。Python作为一种功能强大且易于学习的编程语言,提供了许多内置的数据结构和相关操作。

  1. 列表(List): 用于存储一系列元素,可以通过索引来访问和修改元素,还可以进行切片、增加和删除元素等操作。

  2. 字典(Dictionary): 以键-值对的形式存储数据,通过键来访问和修改值,还可以添加和删除键值对。

  3. 集合(Set): 无序且唯一的数据结构,用于存储一组不重复的元素,可以进行添加和删除元素,以及集合运算(交集、并集、差集等)。

  4. 链表(LinkedList): 由节点组成的数据结构,每个节点包含一个值和指向下一个节点的指针,可以进行插入、删除、搜索和显示节点等操作。

  5. 栈(Stack): 后进先出(LIFO)的数据结构,可以使用列表实现,支持入栈、出栈、查看栈顶元素和获取栈的大小等操作。

  6. 队列(Queue): 先进先出(FIFO)的数据结构,也可以使用列表实现,支持入队、出队、查看队首元素和获取队列的大小等操作。

相关文章:

Python实现数据结构的基础操作

目录 一、列表&#xff08;List&#xff09; 二、字典&#xff08;Dictionary&#xff09; 三、集合&#xff08;Set&#xff09; 四、链表的实现 五、队列和栈 数据结构是计算机科学中非常重要的概念&#xff0c;它用于存储和组织数据以便有效地进行操作。Python作为一种…...

20230624----重返学习-vue-响应式处理思路-仿源码

day-098-ninety-eight-20230624-vue-响应式处理思路-仿源码 vue vue大体概念 Vue是渐进式框架 所谓渐进式框架&#xff0c;就是把一套全面的框架设计体系&#xff0c;拆分成为多个框架&#xff0c;项目中需要用到那些需求&#xff0c;再导入对应的框架&#xff0c;以此来保证…...

【MongoDB】三、使用Java连接MongoDB

【MongoDB】三、使用Java连接MongoDB 实验目的实验内容练习1、开启Eclipse&#xff0c;创建Java Project项目&#xff0c;命名为Mongo12、添加项目依赖的jar包3、创建类MongoDemo4、连接数据库5、查看集合6、创建集合7、删除集合8、查看文档9、插入文档10、更新文档11、删除文档…...

【C++】通讯录的基本实现,附有源码分享

目录 1、运行环境 2、系统实现功能 2.1菜单功能 2.2退出通讯录功能 2.3添加联系人功能 2.4显示联系人功能 2.5删除联系人功能 2.6查找联系人功能 2.7修改联系人功能 2.8清空联系人功能 2.9动态扩容功能 2.10选择优化功能 2.11文件操作 3、源码分享 1、运行环境 …...

UI 自动化测试 —— selenium的简单介绍和使用

selenium 是 web 应用中基于 UI 的自动化测试框架&#xff0c;支持多平台、多浏览器、多语言。 提到 UI 自动化就先了解什么是自动化测试&#xff1f; 目录 1. 自动化测试 2. UI 自动化 2.1 UI 自动化的特点 2.2 UI 自动化测试的优缺点 2.3 UI 自动化测试的使用对象 2.4…...

mybatisPlus中apply的使用以进行联表等复杂sql语句

在 MyBatis-Plus 中&#xff0c;apply() 方法可以用于添加任意的 SQL 片段&#xff0c;包括联表查询。因此&#xff0c;你可以使用 apply() 方法来处理各种类型的联表查询。 使用 apply() 方法的好处是可以在查询条件中直接添加原生的 SQL 片段&#xff0c;而不受 MyBatis-Plu…...

自学Python技术的方法

目录 一、Python技术介绍 二、学习前的准备工作 三、学习时的具体操作 四、如何巩固学习 Python是一种高级编程语言&#xff0c;被广泛用于软件开发、数据分析、人工智能和科学计算等领域。它于1991年由Guido van Rossum创建&#xff0c;并且其简洁、易读的语法以及丰富的标…...

python熟悉python基础语法,了解html网络结构,了解json格式数据,含有字符串

前言 Python网络爬虫是利用Python编写的程序&#xff0c;通过自动化地访问网页、解析html或json数据&#xff0c;并提取所需信息的技术。下面将详细介绍一些与Python网络爬虫相关的重要知识点。 1、Python基础语法&#xff1a; 变量和数据类型&#xff1a;学习如何声明变量以及…...

linux mail -s发送邮件异常解决

异常&#xff1a; Error initializing NSS: Unknown error -8015. "/root/dead.letter" 11/301 . . . message not sent. 出现此问题&#xff0c;大概率是和证书相关。如果没有安装证书&#xff0c;请先安装&#xff1a; 1&#xff0c;下载 yum -y install mailx …...

Netty核心技术七--Google Protobuf

1.编码和解码的基本介绍 编写网络应用程序时&#xff0c;因为数据在网络中传输的都是二进制字节码数据&#xff0c;在发送数据时就需要编码&#xff0c;接收数据时就需要解码 codec(编解码器) 的组成部分有两个&#xff1a;decoder(解码器)和encoder(编码器)。encoder 负责把…...

【Docker】Docker常用命令总结

文章目录 一、帮助命令二、镜像命令三、容器命令四、常用的其他命令 在开发过程中&#xff0c;经常涉及到 docker 的相关操作&#xff0c;本文对常用的指令进行汇总。 一、帮助命令 docker version # 显示docker版本信息 docker info # 显示docker系统信息&#xff…...

React 对比class与Effect Hook优化响应式数据更新监听,感受useEffect真正的强大

还是之前写过的一个组件 import React from "react"export default class index extends React.Component{constructor(props){super(props);this.state {name: "小猫猫"}}componentDidMount ()>{document.title this.state.name;}componentDidUpda…...

AWS Lambda 介绍

计算服务的演进 EC2------Container-------Lambda 虚拟机---容器--------------serverless无服务器架构 什么是AWS Lambda&#xff1f; AWS lambda的核心是事件驱动&#xff0c;驱动可能来自&#xff0c;Alexa,SNS&#xff0c;DynamoDB&#xff0c;S3&#xff0c;Kinesis等&…...

linux之权限管理

目录 1.一.基本小语句 2.文件权限操作chmod 1.一.基本小语句 ls - a 查看此文件夹所有和隐藏内容 ls - l 查看此文件夹权限 chown 改变文所有者 2.文件权限操作chmod chmod 参数 文件名 文件的权限主要针对三类对象进行定义   owner 属主, u:针对前三个部分的权限修改   …...

【设计模式与范式:行为型】61 | 策略模式(下):如何实现一个支持给不同大小文件排序的小程序?

上一节课&#xff0c;我们主要介绍了策略模式的原理和实现&#xff0c;以及如何利用策略模式来移除 if-else 或者 switch-case 分支判断逻辑。今天&#xff0c;我们结合“给文件排序”这样一个具体的例子&#xff0c;来详细讲一讲策略模式的设计意图和应用场景。 除此之外&…...

【C++】auto_ptr为何被唾弃?以及其他智能指针的学习

搭配异常可以让异常的代码更简洁 文章目录 智能指针 内存泄漏的危害 1.auto_ptr(非常不建议使用) 2.unique_ptr 3.shared_ptr 4.weak_ptr总结 智能指针 C中为什么会需要智能指针呢&#xff1f;下面我们看一下样例&#xff1a; int div() {int a, b;cin >&g…...

数据结构练习题1:基本概念

练习题1&#xff1a;基本概念 1 抽象数据类型概念分析2. 逻辑结构与存储结构概念分析3.综合选择题4.综合判断题5.时间复杂度相关习题6 时间复杂度计算方法&#xff08;一、二、三层循环&#xff09; 1 抽象数据类型概念分析 1.可以用&#xff08;抽象数据类型&#xff09;定义…...

如何消除Msxml2.XMLHTTP组件的缓存

之前使用这个组件&#xff0c;是每隔十分钟取数据&#xff0c;没有遇到这个缓存问题&#xff0c; 这次使用它是频繁访问接口&#xff0c;就出现了一直不变的问题。觉得是缓存没有清除的问题。 网上搜了一些方案。最好的方案就是给url地址末尾给一个随机参数。用于让组件觉得是…...

深入理解Java虚拟机jvm-运行时数据区域(基于OpenJDK12)

运行时数据区域 运行时数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的…...

(OpenCV) 基础demo

文章目录 前言Demo图片录制播放人脸识别 END 前言 OpenCV - Open Computer Vision Library OpenCV的名声想必不用多说了。 本文介绍4个基础使用demo。分别为&#xff0c;显示图片&#xff0c;录制视频&#xff0c;播放视频和一个基于开源算法库的人脸识别小demo。 只要环境…...

using 的使用

作者: 苏丙榅 链接: https://subingwen.cn/cpp/using/ 在 C 中 using 用于声明命名空间&#xff0c;使用命名空间也可以防止命名冲突。在程序中声明了命名空间之后&#xff0c;就可以直接使用命名空间中的定义的类了。在 C11 中赋予了 using 新的功能&#xff0c;让C变得更年轻…...

Websocket、Socket、HTTP之间的关系

Websocket、Socket、HTTP之间的关系 ★ Websocket是什么&#xff1f;★ Websocket的原理★ websocket具有以下特点&#xff1a;★ webSocket可以用来做什么?★ websocket与socket区别&#xff1a;★ WebSocket与HTTP区别 ★ Websocket是什么&#xff1f; ● Websocket是HTML5下…...

hustoj LiveCD版系统在局域网虚拟机安装和配置

root权限 打开terminal命令行输入sudo su输入初始密码freeproblemsetmysql数据库的密码的位置&#xff0c;如何登陆数据库 数据库账号密码存放在两个配置文件中&#xff1a; /home/judge/etc/judge.conf/home/judge/src/web/include/db_info.inc.php 新版本中&#xff0c;快…...

读书-代码整洁之道10-14

类 类的三大特性&#xff1a;封装、继承、多态&#xff1b;类应该短小&#xff1b;单一权责原则认为&#xff0c;类或模块应有且只有一条加以修改的理由&#xff1b;当类丧失了内聚性&#xff0c;就拆分它&#xff1b;隔离修改 系统 构造和使用是非常不一样的过程。每个应用…...

UDP 广播/组播

广播UDP与单播UDP的区别就是IP地址不同&#xff0c;广播使用广播地址xxx.xxx.xxx.255&#xff0c;将消息发送到在同一广播网络上的每个主机&#xff0c;广播/组播只能用udp进行实现 函数:int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_topt…...

高效创作助手:ChatGPT最新版实现批量撰写聚合文章的全新水平

随着人工智能技术的不断发展&#xff0c;ChatGPT最新版作为一款智能创作助手&#xff0c;实现了批量撰写聚合文章的全新水平。它能够在短时间内生成高质量的文章&#xff0c;极大地提高了创作效率。本文将从随机8-20个方面对ChatGPT最新版进行详细的阐述&#xff0c;让我们一起…...

Python中的包是什么,如何创建和使用包?

在Python中&#xff0c;包是一种将相关模块分组在一起的方式。它可以让我们更好地组织和重用代码。 一个Python包实际上是一个文件夹&#xff0c;其中包含该包的Python模块和其他资源文件&#xff08;例如配置文件、数据文件等&#xff09;。包的根目录通常包含一个名为__init…...

Spring Cloud Alibaba Seata(二)

目录 一、Seata 1、Seata-AT模式 1.1、具体案例 1.2、通过Seata的AT模式解决分布式事务 2、Seata-XA模式 3、Seata-TCC模式 4、Seata-SAGA模式 一、Seata 1、Seata-AT模式 概念&#xff1a;AT模式是一种无侵入的分布式事务解决方案&#xff0c;在 AT 模式下&#xff0c…...

如何在 MySQL 中使用 COALESCE 函数

1. 简介 在 MySQL 中&#xff0c;COALESCE 函数可以用来返回参数列表中的第一个非空值。如果所有参数都为空&#xff0c;则返回 NULL。本文将介绍 COALESCE 函数的语法和用法&#xff0c;并通过示例演示其效果。 2. 语法 COALESCE 函数的语法如下所示&#xff1a; COALESCE(…...

Python爬虫之Scrapy框架系列(22)——初识分布式爬虫scrapy_redis

目录: 分布式爬虫(Scrapy\_redis):1.简单介绍:2.Scrapy_redis的安装:分布式爬虫(Scrapy_redis): 官方文档:https://scrapy-redis.readthedocs.io/en/stable/1.简单介绍: scrapy_redis是一个基于Redis的Scrapy组件,用于scrapy项目的分布式部署和开发。 特点: 分布…...

网站ip屏蔽/品牌线上推广方案

科普&#xff1a;值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到实际参数。引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中&#xff0c;那么在函数…...

衢州网站建设公司/nba最新消息球员交易

数据库系统原理-关系代数 目录数据库系统原理-关系代数在文件处理系统中存储组织信息的主要弊端三级模式两级映射独立性物理数据逻辑性逻辑数据逻辑性关系关系关系模式和关系实例关系模式描述关系的结构关系实例关系、关系模式、关系实例区别关系的无序性码&#xff08;键&…...

wordpress网站自适应/cms自助建站系统

文章目录写在前面解决问题&#xff1a;三维目标检测方法&#xff1a;创新点&#xff1f;参考&#xff1a;[CVPR 2018] VoxelNet&#xff1a;End-to-End Learning for Point Cloud Based 3D Object Detection. [tensorflow] [det. aut.] &#x1f525; ⭐写在前面 之前经常看到对…...

wordpress菜单注册/外链代发免费

我的程序需要將此日期表示爲java.sql.date對象&#xff0c;但似乎當我創建新日期(使用日曆)並將其設置爲 9999-12-31&#xff0c;最後將此java.util.date對象轉換爲java.sql.date對象&#xff0c;該日期轉換爲000-01-31。Java中日期31-12-9999的問題Calendar calendar Calenda…...

江苏建设工程招投标网站/免费注册二级域名的网站

如何导入大批量的用户账户&#xff1f;是我们在2008R2安装搭建好之后需要考虑的一件事情。 方法就是把用户信息在Excel文档里面整理好&#xff0c;然后再用命令或者脚本导入到AD里面。 当然&#xff0c;方法是越简单越好&#xff0c;需要我们修改的越少越好。 我们首先从人事部…...

北京各大公司名称/seo网站关键词优化方法

原文&#xff1a;理解 I/O Completion Port (IOCP完成端口)欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法&#xff0c;最后剖析一个Echo程序来为您拨开IOCP的谜云&#xff0c;除去你心中对IOCP的烦恼。OK&#xff0c;但我不能保证你明白IOCP的一切&#xff…...