Python四大数据结构整理

news2024/12/24 22:12:55

Python四大数据结构整理

  • 列表
    • 列表本身的基础造作操作
    • 列表的增删改查
    • 列表总结
  • 字典
    • 字典的创建
    • 获取字典视图
    • 遍历字典
    • 字典生成式
  • 元组与集合
    • 元组的创建
    • 元组的获取
    • 集合
    • 集合的创建方式
    • 集合的相关操作
  • 对比归纳总结

列表

列表的特点
  1.列表元素按顺序有序排放
  2.索引映射唯一一个数据
  3.列表可以存储重复数据
  4.任意数据类型可以混存
  5.根据需要动态分配和回收内存

列表本身的基础造作操作

1. 创建列表

  • 使用方括号
      lst1=['hello','world',98]	#创建列表
      lst = []					#创建空列表
    
  • 使用内置函数list
      lst2=list(['hello','world',98,'hello'])
    

2. 列表的查询

  • 获取列表中指定元素的索引
    在这里插入图片描述
    print(lst2.index('hello'))  #返回第一个索引
    print(lst2.index('hello',0,4))  #在 0-3内索引
    
  • 获取类表中的单个元素
    在这里插入图片描述

3. 判断指定元素在列表中是否存在

  • 元素 in 列表名
  • 元素 not in 列表名

☆ 4. 列表元素的遍历

  • for 迭代变量 in 列表名 :
    lst=[10,20,'hello','world']
    for item in lst:
        print(item)
    

☆ 5. 列表的切片

  • 获取列表中多个元素-切片
    语法:列表名[start : stop : step ]
QA
切片的结果原类表片段的拷贝,新列表的 id 会变
切片的范围[start ,stop)
step 默认为 1简写为 [start: stop: ]
step 为正数第一个省略默认从头开始切,第二个省略默认切到尾
step 为负数第一个省略默认从最后一个元素开始,第二个省略默认切到头
lst=[10,20,30,40,50,60,70,80]
print('原列表:',lst)
# start=1 stop=6 step=1 步长默认为1
print("原列表id:",id(lst))
lst2=lst[1:6:2]         # start=1 stop=6 step=2
print("新列表id:",id(lst2))
print(lst2)

lst2=lst[::2]           # step = 2 ,首位均默认
print(lst2)

lst2=lst[4::-2]         # start= 4,切到头,step = -2,逆序切
print(lst2)

列表的增删改查

1.列表元素的增加

方法/其他描述
append()在列表末尾添加一个元素 ,id不变
extend()在列表末尾至少添加一个元素 ,id不变
insert()在列表任意位置添加一个元素 ,id不变
切片在列表任意位置至少添加一个元素, id 不变
lst=[10,20,30,40,50,60,70,80]
lst2=['hello','world']
print(lst)

# 常用
lst.append(90)      # 列表末尾添加一个元素
print(lst)

lst.extend(lst2)    # 列表末尾至少添加一个元素
print(lst)

lst.insert(1,90)    # 列表任意位置添加一个元素
print(lst)

# 列表任意位置至少添加一个元素
lst3=[True,False,234]
lst[1:6]=lst3
print(lst)
# 切片 将3后续改为lst3
lst[3:]=lst3
print(lst)

2.列表元素的删除

方法/其他描述
remove()☆一次删除一个元素 根据value删除
元素重复则只移第一个
元素不存在则报异常
pop()☆根据索引删除一个元素
元素不存在则报异常
如果不指定参数,移除最后一个元素
切片一次至少删除一个元素,id变不变看切法
clear() 清空列表
del删除列表
lst=[10,20,30,40,50,60,30]
lst.remove(30)
print(lst)

lst.pop(1)
print(lst)

lst.pop()   #如果不指定参数,将删除最后一个元素
print(lst)
print('id=',id(lst))

#[10, 40, 50, 60]
# 切片删除
#这样切,id不变
lst[1:3]=[]

#这样切,id变
#lst = lst[1:3]=[]
print(lst)
print('id=',id(lst))

# 清空列表
lst.clear()
print(lst)

#删除列表
del lst

3.列表元素的修改

  • 为指定索引的元素赋予一个新值
  • 为指定的切片赋予一个新值
    lst=[10,20,30,40]
    lst[2]=100
    print(lst)
    
    lst[1:3]=[300,400,500,600]
    print(lst)
    

4.列表元素的排序操作

  • 1.调用sort()方法 不产生新的列表,在新的列表上面排序

    lst=[20,40,98,54]
    print('排序前的列表:',lst,id(lst))
    lst.sort()      # 调用列表对象的sort方法,升序排序
    print('排序后的列表:',lst,id(lst))
    
    lst.sort(reverse=True)      # reverse=True  降序
    print(lst)
    lst.sort(reverse=False)     # reverse=False  升序
    print(lst)
    
  • 2.调用内置函数sorted, 会产生新的列表

    print('--------------------调用内置函数sorted, 会产生新的列表--------------------------')
    lst=[20,40,98,54]
    print('排序前的列表:',lst,id(lst))
    
    new_list=sorted(lst)                # 默认 reverse=False  升序
    new_list=sorted(lst,reverse=True)   # reverse=True  降序
    print(' sorted 排序后的列表:',new_list,id(new_list))
    

4.通过列表生成式创建新列表
在这里插入图片描述

lst=[i*2 for i in range(1,6)]   #只能生成有规则的列表
print(lst)  

列表总结

在这里插入图片描述

字典

字典的创建

1.使用 { } 创建
2.内置函数dict()
3.字典生成式

#1.使用{}括号
score={'张三':100,'李四':98,'王五':75}
#2.使用内置函数dict()
stu=dict(name='jack',age=20)
#3.字典生成式
items=['Fruits','Books','Others']
prices=[96,78,85,100,90]    #元素少的为基准
dic={item.upper():value for item,value in zip(items,prices) }

常用操作

  • 获取value
    1. 字典名 [ key ]
    2. 字典名. get( key )
  • 删key-value
     del 字典名 [ key ]
  • 修改/新增
     字典名 [ key ] = value
  • in / not in

获取字典视图

方法功能
keys()获取字典中的所有键 key
values()获取字典中的所有值 value
items()获取字典中的所有键值对 key, value
score  = {'张三':100,'李四':98,'王五':75}
keys   = score.keys()			#获取所有键
values = score.values()      	#获取所有值
items  = score.items()			#获取所有键值对 返回值为元组类型

lst = list(keys)  	#键转列表
lst = list(values)    #值转列表

遍历字典

score={'张三':100,'李四':98,'王五':75}
for item in score:
	print(item,score[item],score.get(item))

字典特点

  • 字典的元素是无序的,根据键key来查找Value所在的位置
  • 字典中元素的键不允许重复,值允许重复
  • key必须是不可变对象
  • 可根据需求动态伸缩
  • 浪费较大的内存,是一种空间换时间的数据结构 中间有空余 但查找快

字典生成式

items  = ['Fruits','Books','Others']
prices = [96,78,85,100,90]    #元素少的为基准
dic    = {item:price  for item, price in zip(items, prices)}

元组与集合

元组的创建

t1 = ('Python','World',98)			#常用
t2 = tuple(('python','world',98))	#强转
t3 = ('python',)					#一个元素,逗号不可省略

元组的获取

print('---------------------元组遍历------------------')
t=('Python','World',98)
# 1. 使用索引
print(t[0])
# 2. 遍历
for item in t:
    print(item)

为什么要将元组设计成不可变序列

  • 为什么要将元组设计成不可变序列:
    1. 在多任务环境下,同时操作对象时不需要加锁
    2. 因此,在程序中尽量使用不可变序列
  • 注意事项:元组中存储的是对象的引用
    1. 如果元组中对象本身不可变对象,则不能再引用其它对象
    2. 如果元组中的对象是可变对象, 则可变对象的引用不允许改变,但数据可以改变

典例:type+id

t=(10,[20,30],9)
print(t)
print(type(t))
print(t[0],type(t[0]),id(t[0]))
print(t[1],type(t[1]),id(t[1]))
print(t[2],type(t[2]),id(t[2]))
#t[1]=100   元组是不允许修改元素的
#由于[20,30]为列表,而列表是可变序列,所以可以向列表中添加元素,而列表内存地址不变
t[1].append(100)    #向列表中添加元素
print(t,id(t[1]))

集合

  • Python语言提供的内置数据结构
  • 与列表、宇典一样都属于可变类型的序列
  • 集合是没有value的宇典
  • 和字典相同,无序且不能重复

集合的创建方式

s  = {2,3,4,5,5,6,7,7}  	#直接 {} 创建
s1 = set(range(6))			#使用内置函数 set()
s2 = set([1,2,3,4,4,5])     #列表转集合
s3 = set((2,3,1,4,4,5))     #元组转集合  集合是无序的
s4 = set('python')          #字符转集合
s5 = set({12,4,6,2,89,3})   #集合转集合                 
s6 = set()                  #空集合

集合的相关操作

功能函数 / 方法描述
判断in存在
not in不存在
新增add()一次只添加一个
update()至少添加一个
删除remove()一次删除一个,不存在报错
discard()一次删除一个,不存在不报错
pop()不能添参数,一次任意删一个
clear()清空集合元素
print('----------------集合的相关操作--------------')
#判断   in  或者 not in
s={10,20,30,40,50}
print(10 in s)

#增加    add  或者  updata
s.add(100)  #一次只添加一个
s1={3762,9773}
s.update(s1)    #至少添加一个
print(s)
 
#删除
s.remove(100)
print(s)
s.pop()
s.pop()
print(s)
s.clear()

对比归纳总结

数据结构是否可变是否重复是否有序定义符号
列表(list)可变可重复有序[ ]
字典(dict)可变key不重复,value可重复无序{key:value}
元组(tuple)不可变可重复有序( )
集合(set)可变不可重复无序{ }

在这里插入图片描述

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

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

相关文章

Linux---su:鉴定故障

问题来源:在使用xshell操作Linux命令时,切换root权限报错 可能是未设置密码:输入 sudo password 重新设置一下密码即可 本人犯的错: 因为在Linux下输入密码是没有显示的,然后我的键盘num键没开!!!(也就是输入数字开关的键盘),导致我认为我的密码输进去了,给我整懵逼了&#x…

十四、流式编程(4)

本章概要 终端操作 数组循环集合组合匹配查找信息数字流信息 终端操作 以下操作将会获取流的最终结果。至此我们无法再继续往后传递流。可以说,终端操作(Terminal Operations)总是我们在流管道中所做的最后一件事。 数组 toArray()&…

Docker Dockerfile解析

Dockerfile是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 官网:Dockerfile reference | Docker Docs 构建三步骤: 编写Dockerfile文件docker build命令构建镜像docker run依镜像运行容…

Bun 1.0 正式发布,爆火的前端运行时,速度遥遥领先!

文章目录 一、包子1.0二、Bun 是一个一体化工具包为什么包子存在 二、Bun 是一个 JavaScript 运行时Node.js 兼容性速度TypeScript 和 JSX 支持ESM 和 CommonJS 兼容性网络 API热重载插件 一、包子1.0 Bun 1.0终于来了。 Bun 是一个快速、一体化的工具包,用于运行…

云原生微服务治理:服务发现、负载均衡与熔断策略

文章目录 什么是云原生微服务治理?服务发现客户端发现服务器端发现 负载均衡Ribbon - 基于客户端的负载均衡Nginx - 基于服务器的负载均衡 熔断策略Hystrix - 熔断器模式 结论 🎉欢迎来到云计算技术应用专栏~云原生微服务治理:服务发现、负载…

【AI视野·今日Robot 机器人论文速览 第三十九期】Fri, 22 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 22 Sep 2023 Totally 39 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers ForceSight: Text-Guided Mobile Manipulation with Visual-Force Goals Authors Jeremy A. Collins, Cody Houff, You Liang …

【项目】在线音乐播放器测试报告

目录 项目背景 项目功能 测试计划 功能测试 登录页面的测试 测试用例 测试结果 注册页面的测试 测试用例 测试结果 音乐列表页面的测试 测试用例 测试结果 出现的bug 搜索功能的bug 问题解决 删除功能的bug 问题解决 喜欢列表页面的测试 测试用例 测试结果…

【Web3】DAO相关的基础知识

这里写目录标题 DAO 的基础概念为什么需要 DAO?DAO 的种类 DAO 的运作方式知名 DAO 的介绍Bankless DAOSeeDAO DAO 的生态全景图分类治理框架DAO 的工具 DAO 众筹平台介绍 - JuiceBoxDAO 投票治理介绍 - SnapshotDAO 贡献 & 激励 - POAPDAO 信息管理 - NotionDA…

2023手把手教授neo4j安装及环境配置

安装包下载: 首先进入Neo4j官网:Neo4j Graph Database & Analytics | Graph Database Management System 在上方选择栏中选择“Products”,在其中选择“Deployment Center”,点击“Download Neo4j to get started” 然后往下…

qt操作sqlite数据库

有两种方法,一种使用qt中的QSqlDatabase模块,另一种使用sqlite3提供的c/c接口。 其中第一种需要需要在工程下的.pro文件中加入“QT sql”,在qt安装目录对应的编译器下的plugins目录中要有sqldrivers文件夹 第二种方法需要在sqlite官网&am…

umi+react+dva简单搭建一个项目框架(配置layout、antd、路由等)

目录 umireactdva简单搭建一个项目框架(配置layout、antd、路由等)创建项目引入antd抽离配置 config01: config / config.js02: config / router / router.js03:配置layout03_1 config.js03_2 router.js效果 umireactdva简单搭建一个项目框架(配置layout、antd、路由…

Vue系列(三)之 基础语法下篇【事件处理,表单综合案例,组件通信】

一. 事件处理 在 Vue.js 中,v-on 指令被用于监听 DOM 事件,并在事件触发时执行相应的方法,这些方法就是事件处理器。v-on 指令有简写形式 ,例如 click"handleClick" 会监听点击事件并执行 handleClick 方法。 事件处理…

视频剪辑软件Premiere Pro 2022 mac(pr2022) v22.6.2中文版

Premiere Pro 2022 mac不仅可以帮助用户对各种视频进行剪辑、旋转、分割、合并、字幕添加、背景音乐等基础的处理,pr2022 mac还能帮助用户进行视频颜色校正、颜色分级、稳定镜头、调整层、更改片段的持续时间和速度、效果预设等操作,功能强大。 ​Premie…

服务注册发现_什么是服务治理

为什么需要服务治理 在没有进行服务治理前,服务之间的通信是通过服务间直接相互调用来实现的。 过程: 武当派直接调用峨眉派和华山派,同样,华山派直接调用武当派和峨眉派如果系统不复杂,这样调用没什么问题。但在复杂的微服务系统…

七、高斯朴素贝叶斯算法(Gaussian NB,Gaussian Naive Bayes)(有监督学习)

高斯朴素贝叶斯Gaussian Naive Bayes (GaussianNB). 可通过 partial_fit 对模型参数进行在线更新 一、算法思路 所谓高斯贝叶斯指的便是假定样本每个特征维度的条件概率均服从高斯分布,进而再根据贝叶斯公式来计算得到新样本在某个特征分布下其属于各个类别的后验…

计算机组成原理之硬件的基本组成,深入介绍两大计算机结构体系,从底层出发认识计算机。

大家好,欢迎阅读《计算机组成原理》的系列文章,本系列文章主要的内容是从零学习计算机组成原理,内容通俗易懂,大家好好学习吧!!! 更多的优质内容,请点击以下链接查看哦~~ ↓ ↓ ↓ …

【Log】为类中的所有日志打印添加前缀

文章目录 前言验证探索后记 前言 有没有一种办法,在一个类中(业务逻辑)。logger.info 的时候自动加上日志前缀,这样子查日志更方便。stackoverflow 上面有对该问题的讨论,实测可用,这里记录一下。 来自stackoverflow 简洁可用的…

离线部署 python 3.x 版本

文章目录 离线部署 python 3.x 版本1. 下载版本2. 上传到服务器3. 解压并安装4. 新建软连信息5. 注意事项 离线部署 python 3.x 版本 1. 下载版本 python 各版本下载地址 本次使用版本 Python-3.7.0a2.tgz # linux 可使用 wget 下载之后上传到所需服务器 wget https://www.py…

使用Go开源的一款性能监控软件,开箱即用,自动化图表生成

使用Go开源的一款性能监控软件,开箱即用,自动化图表生成。 uptrace介绍 uptrace是一体化工具,优化性能并监视错误和日志的开源监控系统。Uptrace是一个经济高效的跟踪解决方案,可帮助您监控、了解和优化复杂的分布式系统。对您的…

运行springBoot项目

本文背景:接手后端Maven管理的springBoot项目,但是不太清楚具体怎么运行项目 写此文章作为纪念 参考链接:IDEA运行SpringBoot项目(图文详细讲解)_idea项目运行_叫我小楠的博客-CSDN博客 步骤如下: 1.设…