python中的数据容器
第六章:Python数据容器
数据容器入门
什么是数据容器
- 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
根据特点的不同分类数据容器(是否支持重复元素、是否可以修改、是否有序等)
列表(list)
元组(tuple)
字符串(str)
集合(set)
字典(dict)
数据容器:list(列表)
列表的定义
基本语法:

列表内的每一份数据,称之为元素
以[]作为标识
列表内每一个元素之间用,逗号隔开
注意:列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套
列表的下标索引
列表的每一个元素,都有编号称之为下标索引;从前向后的方向,编号从0开始递增;从后向前的方向,编号从-1开始递减
正向索引

反向索引

嵌套索引

注意下标索引的取值范围,超出范围无法取出元素,并且会报错
列表的常用操作
查找某元素的下标
功能:查找指定元素在列表的下标,如果找不到,报错ValueError
语法:列表.index(元素)
index就是列表对象(变量)内置的方法(函数)

列表的修改功能
语法:列表[下标]=值

插入元素
语法:列表.insert(下标,元素),在指定的下标位置,插入指定的元素

追加元素
语法:列表.append(元素),将指定元素,追加到列表的尾部

追加元素2
语法:列表.extend(其他数据容器),将其他数据容器的内容取出,依次追加到列表尾部

删除元素
语法1:del 列表[下标]
语法2:列表.pop(下标),可将删除的元素返回

修改某元素在列表中的第一个匹配项
语法:列表remove(元素)

清空列表内容
语法:列表.clear()

统计某元素在列表内的数量
语法:列表.count(元素)

统计列表内,有多少元素
语法:len(列表)

list(列表)的遍历
while循环
for循环
两者对比
在循环控制上
while循环可以自定循环条件,并自行控制
for循环不可以自定循环条件,只可以一个个从容器内取出数据
在无限循环上
while循环可以通过条件控制做到无限循环
for循环理论上不可以,因为被遍历的容器容量不是无限的
在使用场景上
while循环适用于任何想要循环的场景
for循环适用于,遍历数据容器或简单的固定次数循环场景
数据容器:tuple(元组)
元组的定义
定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。

元组也支持嵌套

注意事项:元组只有一个数据,这个数据后面要加添加逗号,不加逗号的话就变成了字符串类型了
元组的操作
index():查找某个数据,如果数据存在返回对应的下标,否则报错
count():统计某个数据在当前元组出现的次数
len(元组):统计元组内的元素个数
注意事项:元组由于不可修改的特性,所以其操作方法非常少。
不可以修改元组的内容,否则会直接报错
可以修改元组内的list的内容(修改元素、增加、删除、反转等)
不可以替换list为其它list或其它类型

元组的特点
可以容纳多个数据
可以容纳不同类型的数据(混装)
数据是有序存储的(下标索引)
允许重复数据存在
不可以修改(增加或删除元素等)
支持for循环
数据容器:str(字符串)
再识字符串
- 字符串是字符的容器,一个字符串可以存放任意数量的字符
字符串是无法修改的数据容器
字符串的常见操作
查找特定字符串的下标索引值(起始位置)
- 语法:字符串.index(字符串)

- 语法:字符串.index(字符串)
字符串的替换
语法:字符串.replace(字符串1,字符串2)
功能:将字符串内的全部:字符串1替换为字符串2
注意:不是修改字符串本身,而是得到了一个新字符串

字符串的分割
语法:字符串.split(分隔符字符串)
功能:按照指定的分隔字符串,将字符串划分为多个字符串,并存入列表对象中
注意:字符串本身不变,而是得到了一个列表对象
可以看到,字符串按照给定的 <空格>进行了分割,变成多个子字符串,并存入一个列表对象中。

字符串的规整操作(去前后格)
- 语法:字符串.strip()

- 语法:字符串.strip()
字符串的规整操作(去前后指定字符串)
语法:字符串.strip(字符串)

注意,传入的是“12” 其实就是:”1”和”2”都会移除,是按照单个字符。
统计字符串中某字符串的出现次数
- 语法:字符串.count(字符串)

- 语法:字符串.count(字符串)
统计字符串的长度
- 语法:len(字符串)

- 语法:len(字符串)
汇总表格
字符串的遍历
- 类似前面的列表和元组
字符串的特点
只可以存储字符串
长度任意(取决于内存大小)
支持下标索引
允许重复字符串存在
不可以修改(增加或删除元素等)
支持for循环
基本和列表、元组相同;不同与列表和元组的在于:字符串容器可以容纳的数据类型是单一的,只能是字符串类型;不同与列表,相同于元组的在于:字符串不可修改
数据容器(序列)的切片
什么是序列?
序列是指:内容连续、有序,可使用下标索引的一类数据容器
列表、元组、字符串都可以视为序列。


序列的常用操作-切片
序列支持切片,即:列表、元组、字符串,均支持进行切片操作
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:
起始下标表示从何处开始,可以留空,留空视作从头开始
结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
步长表示,依次取元素的间隔
步长1表示,一个个取元素
步长2表示,每次跳过1个元素取
步长N表示,每次跳过N-1个元素取
步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)
注意:此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)
序列的切片演示
数据容器:set(集合)
集合的定义
基本语法:

特点:去重且无序(因为要对元素做去重处理,所以无法保证顺序和创建的时候一致)
对比学习

集合的常用操作
集合的常用操作-修改
添加新元素
语法:集合.add(元素)。将指定元素,添加到集合内
结果:集合本身被修改,添加了新元素

移除元素
语法:集合.remove(元素),将指定元素,从集合内移除
结果:集合本身被修改,移除了元素

从集合中随机取出元素
语法:集合.pop(),功能,从集合中随机取出一个元素
结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

清空集合
语法:集合.clear(),功能,清空集合
结果:集合本身被清空

取出2个集合的差集
语法:集合1.difference(集合2),功能:取出集合1和集合2的差集(集合1有而集合2没有的)
结果:得到一个新集合,集合1和集合2不变

消除2个集合的差集
语法:集合1.difference_update(集合2)
功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素。
结果:集合1被修改,集合2不变

2个集合合并
语法:集合1.union(集合2)
功能:将集合1和集合2组合成新集合
结果:得到新集合,集合1和集合2不变

集合的常用操作 - 集合长度
查看集合的元素数量
语法:len(集合)
功能:统计集合内有多少元素
结果:得到一个整数结果

集合的常用操作 - for循环遍历
- 要注意:集合不支持下标索引,所以也就不支持使用while循环。

- 要注意:集合不支持下标索引,所以也就不支持使用while循环。
集合常用功能总结
集合的特点
可以容纳多个数据
可以容纳不同类型的数据
数据是无序存储的(不支持下标索引)
不允许重复数据存在
可以修改(增加或删除元素等)
支持for循环
数据容器:dict(字典、映射)
字典的定义
字典的定义,同样使用{},不过存储的元素是一个个的:键值对
使用{}存储元素,每一个元素都是一个键值对
每一个键值对包含key和value(用冒号分隔)
键值对之间使用逗号分隔
Key和Value可以是任意类型的数据(Key不可为字典)
Key不可重复,重复会对原有数据覆盖
语法格式:

字典数据的获取
字典同集合一样,不可以使用下标索引但是字典可以通过Key值来取得对应的Value

字典的嵌套
字典的Key和Value可以是任意数据类型(Key不可为字典),字典是可以嵌套的

嵌套字典的内容获取
字典的注意事项
键值对Key和Value可以是任意类型(Key不可为字典)
字典内的Key不允许重复,重复添加等同于覆盖原有数据
字典不可用下标索引,而是通过Key检索Value
字典的常用操作
新增元素
语法:字典[Key] = Value,结果:字典被修改,新增了元素

更新元素
语法:字典[Key] = Value,结果:字典被修改,元素被更新
注意:字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value值

删除元素
语法:字典.pop(Key),结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除

清空字典
语法:字典.clear(),结果:字典被修改,元素被清空

获取全部的key
语法:字典.keys(),结果:得到字典中的全部Key

遍历字典
语法:for key in 字典.keys()
- 运行结果

计算字典内的全部元素(键值对)数量
语法:len(字典)
结果:得到一个整数,表示字典内元素(键值对)的数量

字典常用操作总结
字典的特点
可以容纳多个数据
可以容纳不同类型的数据
每一根数据是KeyValue键值对
可以通过Key获取到Value,Key不可重复(重复会覆盖)
不支持下标索引
可以修改(增加或删除更新元素等)
支持for循环,不支持while循环
扩展:数据容器对比总结
数据容器的通用操作
数据容器的通用操作 - 遍历
5类数据容器都支持for循环遍历
列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)
数据容器的通用统计功能
len(容器):统计容器的元素个数
max(容器):统计容器的最大元素
min(容器):统计容器的最小元素
容器的通用转换功能
容器通用排序功能
sorted(容器, [reverse=True]):将给定容器进行排序
注意,排序后都会得到list(列表)对象
容器通用功能总览
扩展:字符串的大小比较
字符串进行比较就是基于数字的码值(ASCII)大小进行比较的。
- ASCII码表

- ASCII码表
字符串是按位比较,也就是一位位进行对比,只要有一位大,那么整体就大。
python中的数据容器的更多相关文章
- Python中的高性能容器--collections
集合模块 相对于 Python 中内置的称为链表.集合.字典和元组的默认容器类型来说,集合模块( collection module )提供了高性能的备选方案( alternative ). 简单地看 ...
- python中的数据存储认识
声明:本人是一个初学者,博客内容基本也是一些基础的东西,如果说的有什么问题欢迎纠正. 前言 许多人初学python之前应该也学习过其他的语言,比如博大精深的c语言,笔者在学习python之前就学习过c ...
- 『无为则无心』Python基础 — 11、Python中的数据类型转换
目录 1.为什么要进行数据类型转换 2.数据类型转换本质 3.数据类型转换用到的函数 4.常用数据类型转换的函数 (1)int()函数 (2)float()函数 (3)str()函数 (4)bool( ...
- python基础学习——数据容器
1.数据容器相当于C的数组 有list,tuple(元组),str,set(集合),dict五种数据容器 2.list(列表) 列表中可存在不同的数据类型,可嵌套 #反向索引 name_list = ...
- [笔记] Python 中JSON数据的读写
前言 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换语言 JSON是独立于语言的文本格式, JSON 数据格式与语言无关 JSO ...
- Python中dataframe数据框中选择某一列非空的行
利用pandas自带的函数notnull可以很容易判断某一列是否为null类型,但是如果这一列中某一格为空字符串"",此时notnull函数会返回True,而一般我们选择非空行并不 ...
- python中excel数据分组处理
1.场景描述 因文本相似性热度统计(python版)需求中要根据故障类型进行分组统计,需要对excel进行分组后再分词统计,简单记录下,有需要的朋友可以直接拿走,不客气! 2.解决方案 采用panda ...
- python中把数据存入csv中
import csv # 如果不添加newline=""的话,就会每条数据中间都会有空格行 with open("test.csv","w" ...
- python中后端数据序列化不显示中文的解决方法
我们在前后端交互的时候,让序列化的数据更友好的显示,我们会用到 import json js = json.loads('{"name": "多多"}') pr ...
- Python中 将数据插入到Word模板并生成一份Word
搬运出处: https://blog.csdn.net/DaShu0612/article/details/82912064
随机推荐
- Vulnhub Bravery靶机 Walkthrough
Bravery Recon 使用netdiscover对本地网络进行arp扫描. ┌──(kali㉿kali)-[~] └─$ sudo netdiscover -r 192.168.80.0/24 ...
- LeeCode 317周赛复盘
T1: 可被3整数的偶数的平均值 思路:数组遍历 被3整数的偶数 \(\Leftrightarrow\) 被6整数的数 public int averageValue(int[] nums) { in ...
- 全新跨平台版本.NET敏捷开发框架-RDIFramework.NET5.0震撼发布
RDIFramework.NET,基于全新.NET Framework与.NET Core的快速信息化系统敏捷开发.整合框架,给用户和开发者最佳的.Net框架部署方案.为企业快速构建跨平台.企业级的应 ...
- Nuxt3环境变量配置
Nuxt3 正式发布还不到半年,在投入生产环境使用后,遇到了不少问题,很难找到合适的解决方案,其中环境变量配置就是其中一个,之前一直未能解决,最近要上持续集成,无法绕过这个问题,所以花了点时间研究了一 ...
- P2482 [SDOI2010] 猪国杀
方法论 这是一道复杂的模拟题.由于游戏规则的条目很多,我们需要仔细考虑程序的组织.否则,在编写程序的过程中极容易陷入停滞的状态(不知道下一步应该怎么做),或在发现程序出问题时,难以快速定位到错误点,对 ...
- Python获取jsonp数据
使用python爬取数据时,有时候会遇到jsonp的数据格式,由于不是json的,所以不能直接使用json.loads()方法来解析,需要先将其转换为json格式,再进行解析.在前面讲了jsonp的原 ...
- 【CSS】画出宽度为1像素的线或边框
由于多倍的设计图在移动设备上显示时会将设计图进行缩小到视口宽度,而1px的边框没有随着页面进行缩小而导致效果太粗,想要还原设计图1px的显示效果,因此需要一些方法来实现边框宽度小于1px. 实现方法很 ...
- 2023-04-19:给定一个非负数组arr 任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 然后新的arr继续,任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 一直到ar
2023-04-19:给定一个非负数组arr 任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 然后新的arr继续,任何两个数差值的绝对值,如果arr中没有,都要加入到arr里 一直到ar ...
- 防抖节流utils
/** * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数 * * @param {Function} func 要执行的回调函数 * @param {Number} wait ...
- 【GiraKoo】Java Native Interface(JNI)的空间(引用)管理
Java Native Interface(JNI)的空间(引用)管理 Java是通过垃圾回收机制回收内存,C/C++是通过malloc,free,new,delete手动管理空间.那么在JNI层,同 ...

















