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

python数据容器

目录

数据容器

反向索引

list列表

语法

案例 

列表的特点

列表的下表索引

list的常用操作

list列表的遍历

while循环遍历

for循环遍历

tuple元组

前言

元组定义

元组特点

获取元组元素 

元组的相关操作

元组的遍历

while循环遍历

for循环遍历

字符串

前言

获取字符串字符 

字符串的常用操作

字符串的特点

数据容器的切片操作

序列

切片语法 

set集合

集合语法

集合特点

集合的常用操作

集合的遍历

字典

字典定义

字典的特点

通过key获取value

字典的常用操作

遍历字典

数据容器总结

数据容器的通用操作

数据容器通用方法

比较大小

通用容器转换

容器的通用排序功能

数据容器

含义:一种可以容纳多份数据的数据类型,容纳每一份数据称之为一个元素,可以是任意类型的数据,如字符串、数字、布尔等

注意:数据容器根据特点(是否支持重复元素、是否可以修改元素、是否有序等)的不同,可以分为5类,分别是列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)等

反向索引

理解:从后向前的索引,也就是从-1开始,依次递减(-1,-2,-3,……)

#定义列表
my_list=["hello",666,True,888]
print(f"列表第一个元素{my_list[0]},列表最后一个元素{my_list[-1]}")
#列表第一个元素hello,列表最后一个元素888

注意:数据容器中支持下标访问的容器都支持反向索引。

list列表

语法

#定义列表
变量名称=[元素1,元素2,元素3,……]#定义空列表
变量名称=[]
变量名称=list()

案例 

#定义列表
my_list=["hello",666,True,[1,"app"]]
print(f"列表内容为:{my_list},列表类型为:{type(my_list)}")
#列表内容为:['hello', 666, True, [1, 'app']],列表类型为:<class 'list'>

列表的特点

  • 整个列表用[]括起来,列表中的每个元素用逗号隔开
  • 列表可以一次存储多个数据,且可以为不同数据类型,支持嵌套所有容器(上限为2**63-1)
  • 数据是有序存储的(有下标序号)
  • 允许重复数据存在
  • 数据可以修改(增加或删除元素等)
  • 支持for和while循环遍历

列表的下表索引

前言:我们可以使用列表的下标索引去取出特定位置的数据

理解:在列表中可以存储多个元素,元素是有顺序的,按照顺序从左到右第一个元素他有一个下标索引叫做0,第二个元素索引为1依次类推(从左到右逐步加一)

接收下标索引语法:接受变量=列表名[索引]

注意:使用下标索引时,一定不要超出索引的范围,不然会报错 

list的常用操作

查询某元素下标:接受变量=列表.index(元素)

注意:查找指定元素在列表的下标,若找不到,就会报ValueError错误

修改列表指定下标的值:列表[下标]=新值

在指定下标插入指定元素:列表.insert(下标,元素)

追加指定元素在列表尾部:列表.append(元素)

追加一批元素在列表尾部:列表.extend(其他数据容器)

注意:将数据容器的内容依次取出,追加到列表(若是字典只追加key)

删除列表指定下标元素:del 列表[下标]

删除列表指定下标元素并返回删除元素:变量=列表.pop(下标)

删除列表中指定元素:列表.remove(具体元素)

注意:先拿到具体元素,从列表中由前到后搜索,删除匹配的第一个

清空整个列表:列表.clear()

统计某元素在列表内的数量:接受变量=列表.count(具体元素)

统计列表中全部元素数量:接受变量=len(列表)

list列表的遍历

前言:既然数据容器可以存储多个元素,那么就会有需求从容器内依次取出元素进行操作,将容器内的元素依次取出进行处理的行为,称之为遍历

while循环遍历

index=0
while index<len(列表):print(f"列表的第{index+1}个元素为:{列表[index]}")index+=1

for循环遍历

index=1
for i in 列表:print(f"列表的第{index}个元素为:{i}")index+=1

tuple元组

前言

  • 列表是可以修改的,若想要传递的信息不被篡改,列表就不合适了
  • 元组同列表一样,都是可以封装多个、不同类型的元素在内,但是元组一旦定义完成,就不可更改(但是元组内的list内容可修改)

元组定义

#定义元组变量
(元素1,元素2,……,元素n)#定义空元组
变量名=()
变量名=tuple()

注意:

  • 元组定义单个元素,那么一定要在后面写个逗号("元素",)
  • 元组也支持反向索引

元组特点

  • 整个元组用()括起来,元组中的每个元素用逗号隔开
  • 元组可以一次存储多个数据,且可以为不同数据类型,支持嵌套所有容器
  • 数据是有序储存的(有下标索引)
  • 允许数据重复存在
  • 元素不可修改(但是列表作为元素,列表里的内容可以修改)
  • 支持for循环和while循环

获取元组元素 

获取元组元素:接受变量=元组名[下标]

元组的相关操作

查找某个元素的下标:接受变量=元组.index(具体元素)

统计元素在元组中出现的次数:接受变量=元组名.count(元素名)

统计元组元素数量:接受变量=len(元组名)

元组的遍历

while循环遍历

index=0
while index<len(元组):print(f"元组的第{index+1}个元素为:{元组[index]}")index+=1

for循环遍历

index=1
for i in 元组:print(f"元组的第{index}个元素为:{i}")index+=1

字符串

前言

  • 尽管字符串看起来并不像列表、元组那样,一看就是存放许多数据类型的容器,但不可否认,字符串同样也是数据容器中的一员
  • 字符串是字符的容器,一个字符串可以存放任意数量的字符
  • 字符串和其他容器一样也可以通过下标进行访问(从前到后下标从0开始、从后向前下标从-1开始)
  • 同元组一样,字符串是不可修改的数据容器;若必须要做,我们只能得到一个新字符串

获取字符串字符 

获取字符串字符:接收变量=字符串[下标]

字符串的常用操作

查找特定字符串的下标索引值:接受变量=字符串.index(字符串)

str="i love you"
n=str.index("love")
print(f"love在字符串的下标索引为:{n}")#2

将字符串内的字符串1全部替换为字符串2:字符串.replace(字符串1,字符串2)

注意:这里并不是修改字符串本身,而是得到一个新的字符串

字符串分割:列表对象=字符串.split(分隔符字符串)

功能:按照指定的分隔符,将字符串划分为多个字符串,并存取列表对象中(这里字符串本身不变,而是得到一个列表对象)

去除字符串前后空格以及回车符:接收变量=字符串.strip()(字符串本身不变)

去除前后指定的字符串:接受变量=字符串.strip(指定的字符串)(字符串本身不变)

str="12i love you21"
str_1=str.strip("12")
print(f"去除12后字符串的内容为:{str_1}")
#去除12后字符串的内容为:i love you

注意:这里的指定字符串指将这个指定的字符串分为子串后,再看前后固定长度的字符串是否都含有该字串,有则去掉

统计字符串中某个字符串出现的次数:接受变量=字符串.count(子串)

统计字符串的总长度:接受变量=len(字符串)

字符串的特点

  • 字符串作为数据容器只能存储字符串
  • 字符串长度任意(取决于内存大小)
  • 支持下标索引
  • 允许重复字符串存在
  • 字符串内容不可修改(可以创建一个新的字符串)
  • 支持for,while循环

数据容器的切片操作

序列

序列:序列是指内容连续、有序、可使用下标索引的一类数据容器

注意:

  • 列表、元组、字符串都可以称为序列
  • 序列支持切片操作(从一个序列中取出一个子序列)
  • 切片操作并不会影响到序列本身,而是得到一个新的序列

切片语法 

切片语法:新序列=序列[起始下标:结束下标:步长]

理解:表示从序列中,指定位置开始,依次取出元素,直到指定位置结束,得到一个新序列

具体解释

  • 起始下标:表示从何处开始,可以留空,留空视作从头开始
  • 结束下标:表示何时结束,可以留空,留空表示截取到结尾
  • 步长:表示依次取元素的间隔,也可以为负数表示倒着取(默认为1)
my_list=[0,1,2,3,4,5,6]
new_list=my_list[1:5:1]
print(f"切片得到的新序列为:{new_list}")
#切片得到的新序列为:[1, 2, 3, 4]
f_list=my_list[5:1:-1]
print(f"切片得到的新序列为:{f_list}")
#切片得到的新序列为:[5, 4, 3, 2]

set集合

前言:若场景需要对内容做去重处理,那么列表,元组,字符串就不方便了。而集合最主要的特点就是不支持元素的重复(自带去重功能,并且内容无序)

集合语法

#定义集合变量
变量名称={元素1,元素2,……,元素n}
#定义空集合
变量名称=set()

集合特点

  • 整个集合用{}括起来,集合中的每个元素用逗号隔开
  • 集合可以容纳多个不同类型的数据,集合不支持嵌套
  • 数据是无序的,不支持下标索引
  • 不允许重复数据存在
  • 可以修改元素内容
  • 仅支持for循环遍历

集合的常用操作

添加新元素:集合.add(元素)

移除元素:集合.remove(元素)

从集合中随机取出一个元素:接受变量=集合.pop()

清空集合:集合.clear()

取两个集合的差集:新集合=集合1.difference(集合2)

注意:取出集合1有而集合2没有的,得到一个新集合,集合1和集合2本身没有任何改变 

消除两个集合的差集:集合1.difference_update(集合2)

注意:对比集合1和集合2,在集合1内,删除和集合2相同的元素,结果集合1被修改,集合2不变

两个集合合并为1个:新集合=集合1.union(集合2)

注意:将集合1和集合2组合成新集合,结果得到新集合,集合1和集合2不变

统计集合元素数量:变量=len(集合)

集合的遍历

注意:集合不支持下标索引,所以不支持while循环

my_set={1,2,3,4,5}
for i in my_set:print(f"集合的元素为:{i}")

字典

前言:通过字典,我们可以实现从key取出value的操作

字典定义

#定义字典变量
变量名={key:value,……,key:value}
#定义空字典
变量名={}
变量名=dict()

注意:

  • 根据字典我们可以实现从key取出value的操作
  • 字典的key不允许重复,若有重复的key,则后面的key会把前面的键值对会把前面的键值对覆盖
  • 字典同集合一样,不可以使用下标索引,但是字典可以通过key值来取得对应的value
  • 字典的value支持嵌套,key不可嵌套
  • 字典若被其他容器嵌套,那么字典只会将key作为其他容器的元素

字典的特点

  • 字典的定义,同样使用{},不过存储的元素是一个个的键值对,每个键值对用逗号隔开,一个键值对一起称为一个元素
  • 可以容纳多个不同类型的数据
  • 每一份数据都是由key和value键值对组成
  • 可以通过key获取到value,数据是无序的,key不可重复
  • 不支持下标索引
  • 可以修改或增加元素
  • 支持for循环不支持while循环

通过key获取value

语法:变量=字典[key]

字典的常用操作

新增/更新元素:字典[key]=value

删除并取出元素:变量=字典.pop(key)

清空字典:字典.clear()

获取全部key:列表对象=字典.keys()

统计字典的元素数量:变量=len(字典) 

遍历字典

前言:因为字典没有下标,所以仅支持for循环遍历

#方式1
for key in 字典.keys():print(f"字典的key是:{key}")print(f"字典的value是:{字典[key]}")#方式2
for key in 字典:print(f"字典的key是:{key}")print(f"字典的value是:{字典[key]}")

数据容器总结

数据容器的通用操作

前言:数据容器尽管各自有各自的特点,但是他们也有通用的一些操作

  • 遍历上5类数据容器都支持for循环遍历,列表、元组、字符串支持while循环,集合、字典不支持(没有下标索引)
  • 数据容器可以通用非常多的功能方法,如len()

数据容器通用方法

比较大小

查找容器最大元素:变量=max(容器)

查找容器最小元素:变量=min(容器)

注意:

  • 字符串比较大小是根据字符串的ASCII码值比较
  • 字典比较大小比较的是key值的大小

通用容器转换

将给定容器转为列表:变量=list(容器)

将给定容器转为字符串:变量=str(容器)

将给定容器转为元组:变量=tuple(容器)

将给定容器转为集合:变量=set(容器)

注意:字典可以转换为别的容器(转换成字符串,那么value就会保留,转换成其他的value就会丢失),但别的容器不可以转换为字典。

容器的通用排序功能

将给定容器进行排序:列表对象=sorted(容器,[reverse=true])

注意:

  • 若想容器的排序进行反转,那么就将reverse的参数改为true
  • 排序后的结果统统变为列表对象
  • 字典的排序是对key值的排序

相关文章:

python数据容器

目录 数据容器 反向索引 list列表 语法 案例 列表的特点 列表的下表索引 list的常用操作 list列表的遍历 while循环遍历 for循环遍历 tuple元组 前言 元组定义 元组特点 获取元组元素 元组的相关操作 元组的遍历 while循环遍历 for循环遍历 字符串 前言…...

【TypeScript】中定义与使用 Class 类的解读理解

目录 类的概念类的继承 &#xff1a;类的存取器&#xff1a;类的静态方法与静态属性&#xff1a;类的修饰符&#xff1a;参数属性&#xff1a;抽象类&#xff1a;类的类型: 总结&#xff1a; 类的概念 类是用于创建对象的模板。他们用代码封装数据以处理该数据。JavaScript 中的…...

好用的数据库管理软件之idea(idea也有数据库???)

1.建立maven项目&#xff08;maven项目添加依赖&#xff0c;对于后期连接数据库很方便&#xff09; 2.连接数据库。。。 这里一定注意端口号&#xff0c;不要搞错了 和上一张图片不一样哦 3.数据库测试代码。。。 然后你就可以在这里边写MySQL代码了&#xff0c;这个工具对于新…...

《操作系统-李治军》测验错题集

章节测试1 启动保护模式以后&#xff0c;指令jmpi 0, 8执行和没有启动保护模式有何区别&#xff1f;&#xff08;&#xff09; 答&#xff1a;得出跳转地址的方式不同 实模式&#xff1a;cs<<4 ip 保护模式&#xff1a;cs查表 ip ‎在系统调用的实现中&#xff0c;在i…...

DP-GAN-判别器代码

将输出的rgb作为输入&#xff0c;输入到判别器中。接着执行一个for循环&#xff0c;看一下body_down列表的组成和x经过body_down之后的值。 body_down是由残差块D组成的列表&#xff1a; 残差块的参数为&#xff1a;(3,128),(128,128),(128,256),(256,256),(256,512),(512,5…...

基于多线程实现服务器并发

看大丙老师的B站视频总结的笔记19-基于多线程实现服务器并发分析_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1F64y1U7A2/?p19&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 思路&#xff1a;首先accept是有一个线程的&#xff0c;另外…...

Golang之路---03 面向对象——接口与多态

接口与多态 何为接口 在面向对象的领域里&#xff0c;接口一般这样定义&#xff1a;接口定义一个对象的行为。接口只指定了对象应该做什么&#xff0c;至于如何实现这个行为&#xff08;即实现细节&#xff09;&#xff0c;则由对象本身去确定。   在 Go 语言中&#xff0c;…...

一条自由游动的鲸鱼

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>鲸鱼</title><style>#canvas-container {width: 100%;height: 100vh;overflow: hidden;}&l…...

将python源代码打包成.exe可执行文件

步骤 1、安装pyinstaller2、打开终端或命令提示符窗口并进入解释器的虚拟环境3、从解释器的虚拟环境进入包含要打包Python文件的目录4、通过以下命令打包5、打包后文件存放位置 1、安装pyinstaller pip install pyinstaller2、打开终端或命令提示符窗口并进入解释器的虚拟环境…...

【数据结构篇】手写双向链表、单向链表(超详细)

文章目录 链表1、基本介绍2、单向链表2.1 带头节点的单向链表测试类&#xff1a;链表实现类&#xff1a; 2.2 不带头节点的单向链表2.3 练习测试类&#xff1a;链表实现类&#xff1a; 3、双向链表测试类&#xff1a;双向链表实现类&#xff1a; 4、单向环形链表**测试类**&…...

linux 中的串口驱动

1.流程描述 打开串口设备&#xff1a;首先需要打开串口设备文件&#xff0c;通常是/dev/ttyX&#xff08;如/dev/ttyUSB0&#xff0c;/dev/ttyS0等&#xff09;。可以使用open()系统调用打开串口设备文件&#xff0c;获取一个文件描述符。 配置串口属性&#xff1a;打开…...

棱镜七彩正式加入龙蜥社区安全联盟(OASA)

近日&#xff0c;龙蜥社区安全联盟&#xff08;OASA&#xff09;正式成立&#xff0c;棱镜七彩成为该联盟成员单位。 龙蜥社区安全联盟是促进产业合作的非营利组织&#xff0c;致力于打造中立开放、聚焦操作系统信息安全的交流平台&#xff0c;推进龙蜥社区乃至整个产业安全生态…...

STM32——STM32F401x系列标准库的下载+环境搭建+建工程步骤(更完整)

文章目录 标准库的下载环境搭建建工程最后的话 标准库的下载 1.STM32标准库的官网下载网站https://www.st.com/content/st_com/en.html 2. 3. 4. 5. 6. 7.点击之后下滑 8.选择自己需要的版本下载 环境搭建建工程 大致步骤同之前我写的一篇STM32——建工程差不多&#xff0…...

基于ArcGIS土地利用量化人类活动的分析及模型构建

ArcGIS产品线为用户提供一个可伸缩的&#xff0c;全面的GIS平台。ArcObjects包含了许多的可编程组件&#xff0c;从细粒度的对象&#xff08;例如单个的几何对象&#xff09;到粗粒度的对象&#xff08;例如与现有ArcMap文档交互的地图对象&#xff09;涉及面极广&#xff0c;这…...

特性Attribute

本文只提及常用的特性&#xff0c;更多特性请查看官方文档。 AddComponentMenu - Unity 脚本 API 常用特性 AddComponentMenu 添加组件菜单 使用 AddComponentMenu 属性可在“Component”菜单中的任意位置放置脚本&#xff0c;而不仅是“Component > Scripts”菜单。 使用…...

pyqt5, 如何在窗口上显示10个点地循环进度条。

要在PyQt5窗口上显示从1个点逐渐增加到10个点&#xff0c;然后周而复始地循环&#xff0c;可以使用PyQt5的图形绘制功能和定时器来实现。以下是一个简单的例子&#xff1a; import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPainter, …...

VM里ubuntu虚拟无法启动

开始认为是VM的设置问题&#xff0c;按照这个链接关闭的3d加速图像显示&#xff0c;以及那个cmd命令&#xff0c;但是没什么用。 后来看到一篇博文和我的错误一模一样&#xff0c;都是只有一个光标在闪。于是按照这个操作进行了一遍&#xff0c;发现是home文件满了&#xff0c…...

信息学奥赛一本通——1156:求π的值

文章目录 题目【题目描述】【输入】【输出】【输入样例】【输出样例】 AC代码 题目 【题目描述】 根据公式&#xff1a; a r c t a n x ( x ) x − x 3 3 x 5 5 − x 7 7 ⋯ arctanx\left ( x \right ) x- \frac{x^3}{3} \frac{x^5}{5}-\frac{x^7}{7} \cdots arctanx(x…...

BI报表工具有哪些作用?奥威BI全面剖析数据

BI报表工具有哪些作用&#xff1f;主要的作用是通过整合多业务来源数据&#xff0c;全面分析挖掘数据&#xff0c;来帮助企业实现数据化运营、支持智能决策、实现数据资产沉淀和增值、进行数据挖掘和预测分析、提高数据可读性和数据可视化程度等&#xff0c;从而提高企业的竞争…...

【云原生K8s】初识Kubernetes的理论基础

K8S由google的Borg系统(博格系统&#xff0c;google内部使用的大规模容器编排工具)作为原型&#xff0c;后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会&#xff08;CNCF&#xff09;于2015年12月成立&#xff0c;隶属于Linux基金会。CNCF孵化的第一个项目…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...