Python四大数据结构整理

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.xdnf.cn/news/140557.html

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

相关文章

2023-09-19 LeetCode每日一题(打家劫舍 IV)

2023-09-19每日一题 一、题目编号 2560. 打家劫舍 IV二、题目链接 点击跳转到题目位置 三、题目描述 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取…

基于微信小程序的宠物交易商城系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境说明用户的主要功能有:管理员的主要功能有:具体实现截图详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考论文参考源码获取 前言 💗博主介绍:✌…

SIEM 中的事件关联

什么是 SIEM 中的事件关联 SIEM 中的事件关联可帮助安全团队识别来自不同来源的安全事件并确定其优先级,从而提供更全面的整体安全环境视图。 在典型的 IT 环境中,会跨各种系统和应用程序生成大量事件和日志。孤立地看,其中许多事件可能看起…

FPGA/数字IC(芯海科技2022)面试题 2(解析版)

以下仅为学习参考(非原创),如有疑惑欢迎评论区指出! 一、单选题(共20题,每题3分,共60分) 1. D触发器:Tsetup3ns,Thold1ns,Tck2q1ns, 该D触发器最大可运行时…

微信小程序快速入门01(含案例)

文章目录 前言一、组件1.常用视图容器类组件viewscroll-viewswiper、swiper-item 2.text、rich-text3.其他常用组件buttonimagenavigator 二、小程序API三、数据绑定1.定义页面数据2.绑定数据 四、事件绑定1.什么是事件2.小程序中常用的事件3.事件对象 的属性列表target和curre…

SQL 如何提取多级分类目录

前言 POI数据处理,原始数据为csv格式,整理入库至PostGreSQL,本例使用PostGreSQL13版本。 一、POI POI(一般作为Point of Interest的缩写,也有Point of Information的说法),通常称作兴趣点&am…

小米手机打开开发者模式

1、打开设置 2、 3、 4、多次连续点击版本,直到提示打开开发者模式 5、进入手机开发者模式后,点击进入“设置”主页的“更多设置”。 6、接着点击进入“开发者选项”。 7、最后打开“USB调试”选项后,手机就打开了USB调试模式。 8、可以…

Web前端的float布局和flex布局

1.float布局 <style>.nav {overflow: hidden;background-color: aqua;}.nav c {float: left;display: block;text-align: center;padding: 10px 20px;text-decoration: none;color: black;}.nav c:hover{background-color: chartreuse;}</style> <div class&q…

30.链表练习题(1)(王道2023数据结构2.3.7节1-15题)

【前面使用的所有链表的定义在第29节】 试题1&#xff1a; 设计一个递归算法&#xff0c;删除不带头结点的单链表L中所有值为x的结点。 首先来看非递归算法&#xff0c;暴力遍历&#xff1a; int Del(LinkList &L,ElemType x){ //此函数实现删除链表中为x的元素LNode *…

WINDOWS 7-11 磁盘分区教程

前言&#xff1a; 现在很多新电脑&#xff0c;尤其是用固态硬盘的电脑&#xff0c;往往内存不是很大&#xff0c;默认系统就给1个c盘&#xff08;系统&#xff09;或者再加一个D盘&#xff08;软件盘&#xff09;。为了更好的管理自己电脑的文件&#xff0c;我们需要增加一个或…

黑马JVM总结(十二)

&#xff08;1&#xff09;五种引用_强软弱 实线箭头表示强引用&#xff0c;虚心线表示软弱虚终结器引用 在平时我们用的引用&#xff0c;基本都为强引用 &#xff0c;比如说创建一个对象通过运算符赋值给了一个变量&#xff0c;那么这个变量呢就强引用了刚刚的对象 强引用的…

VINS中的观测性问题

文章目录 一、背景二、BA problem的观测性问题1、不可观方向2、解决方案3、优化问题中信息矩阵物理意义 三、Keyframe-based Visual-Inertial SLAM的观测性问题1、不可观问题2、解决方案 四、MSCKF观测性分析1、观测性分析2、解决方案3、小结 一、背景 本文档分析以下VINS中的…

Python爬虫基础(三):使用Selenium动态加载网页

文章目录 系列文章索引一、Selenium简介1、什么是selenium&#xff1f;2、为什么使用selenium3、安装selenium&#xff08;1&#xff09;谷歌浏览器驱动下载安装&#xff08;2&#xff09;安装selenium 二、Selenium使用1、简单使用2、元素定位3、获取元素信息4、交互 三、Phan…

【Java 基础篇】Java Supplier 接口详解

在Java中&#xff0c;Supplier接口是一个重要的函数式接口&#xff0c;它属于java.util.function包&#xff0c;用于表示一个供应商&#xff0c;它不接受任何参数&#xff0c;但可以提供一个结果。Supplier通常用于延迟计算或生成值的场景。本文将详细介绍Supplier接口的用法以…

恢复删除文件?不得不掌握的4个方法!

“删除了的文件还可以恢复吗&#xff1f;有个文件我本来以为不重要了&#xff0c;就把它删除了&#xff0c;没想到现在还需要用到&#xff01;这可怎么办&#xff1f;有没有办法找回来呢&#xff1f;” 重要的文件一旦丢失或误删可能都会对我们的工作和学习造成比较大的影响。怎…

google sitemap Sitemap could not be read

google一直也不提示具体原因。直到换个域名&#xff0c;发现可以提交sitemap。去别就是没有www的可以&#xff0c;带www的不行。应为sitemap的地址带www&#xff0c;但是sitemap里面的url内容是不带www&#xff0c;属于非法格式&#xff0c;所以一直报错。更正了sitemap地址后&…

MySQL 篇

目录 1、数据库三范式 2、数据库事务的特性 3、MySQL数据库引擎 4、说说 InnoDB 与 MyISAM 的区别 5、索引是什么&#xff1f; 6、索引数据结构 7、MySQL 索引类型有哪些&#xff1f; 8、索引有什么优缺点&#xff1f; 9、索引设计原则 9、使用索引应该注意些什…

IP 协议

IP协议格式 四位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6,其他版本只在实验室中存在,没有大规模商用 四位首部长度 设定和TCP一样,IP报头是可变长的,IP报头又是带有选项(可以有,可以没有)的,这里的单位也是4个字节,也就是最大有16*464个字节的长度 …

LaTex打出上大下小的公式

想要在latex中打出如下word公式 首先使用 \atop符号 使用如下语句 d_{H(A,B)} max\{{sup\, inf \atop {a \in A\,b \in B}}\,d(a,b), {sup\, inf\,\atop {b\in B\,a\in\,A}}d(b,a)\}. ![在这里插入图片描述](https://img-blog.csdnimg.cn/0c842594716a4693b1124523d53bfcad…

AIGC绘本——海马搬家来喽

随着ChatGPT的快速发展&#xff0c;人工智能领域也发生了翻天覆地的变化。今天&#xff0c;我们迎合科技潮流&#xff0c;利用AIGC的强大能力&#xff0c;可以创作很多精彩的作品&#xff0c;比如这样一本名为《海马搬家》的绘本&#xff08;注&#xff1a;此绘本根据同名儿童故…