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

【Python入门】第5节 数据容器

📖第5节 数据容器

    • ✅数据容器:list(列表)
      • 🧊列表的定义:
      • 🧊列表的下标索引:
      • 🧊列表的常用操作(方法)
      • 🧊list(列表)的遍历
    • ✅数据容器:tuple(元组)
      • 🧊元组的定义
      • 🧊元组的操作
      • 🧊元组的遍历
      • 🧊元组的特点
    • ✅数据容器:str(字符串)
      • 🧊字符串的下标(索引)
      • 🧊字符串的常用操作
      • 🧊字符串的遍历
      • 🧊字符串的特点
    • ✅数据容器的切片
      • 🧊序列
      • 🧊切片
    • ✅数据容器:set(集合)
      • 🧊集合的定义
      • 🧊集合的特点
      • 🧊集合的常用操作
      • 🧊集合的常用操作
    • ✅数据容器:dict(字典、映射)
      • 🧊字典的定义
      • 🧊字典的常用操作
    • ✅数据容器对比总结
    • ✅数据容器的通用操作


学习数据容器,就是为了批量存储或批量使用多份数据

1.什么是数据容器?

  • 一种可以存储多个元素的Python数据类型

2.Python有哪些数据容器?

  • list(列表)、tuple(元组)、str(字符串)、set(集合)、dict(字典)

它们各有特点,但都满足可容纳多个元素的特性。

✅数据容器:list(列表)

  • 列表的定义
  • 列表的下标索引
  • 列表的常用操作

🧊列表的定义:

列表内的每一个数据,称之为元素

  • 以 [] 作为标识

  • 列表内每一个元素之间用, 逗号隔开

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

🧊列表的下标索引:

列表中的每一个元素,都有其位置下标索引,从前向后的方向,从0开始,依次递增

image-20240821221711663

或者,可以反向索引,也就是从后向前:从-1开始,依次递减(-1、-2、-3…)

image-20240821221805078

如图,从后向前,下标索引为:-1、-2、-3,依次递减。

#语法:列表[标号]
name_list ['Tom','Lily','Rose']
print(name_list[-1])	#结果:Rose
print(name_list[-2])	#结果:LiTy
print(name_list[-3])		#结果:Tom

如果列表是嵌套的列表,同样支持下标索引

image-20240821222034515

#2层嵌套list
my_list=[[1,2,3],[4,5,6]]
#获取内层第一个1ist
print(my_list[0])		#结果:[1,2,3]#获取内层第一个1ist的第一个元素
print(my_list[0][0])	#结果:1

下标索引的注意事项:

  • 要注意下标索引的取值范围,超出范围无法取出元素,并且会报错

🧊列表的常用操作(方法)

列表除了可以:

  • 定义
  • 使用下标索引获取值

以外,列表也提供了一系列功能:

  • 插入元素
  • 删除元素
  • 清空列表
  • 修改元素
  • 统计元素个数

等等功能,这些功能我们都称之为:列表的方法

方法作用
index()查找某个数据,如果数据存在返回对应的下标,否则报错
insert(下标, 元素)插入元素
append(元素)追加元素
extend(其它数据容器)追加元素方式2
del 列表[下标]、pop(下标)、remove(元素)、clear()删除元素
count()统计某个数据在当前元组出现的次数
len(元组)统计元组内的元素个数

查找某元素的下标列表.index(元素)

my_list ["itheima","itcast","python"]
print(my_list.index("itcast"))		#结果:1

修改特定位置(索引)的元素值列表[下标] = 值

#正向下标
my_list=[1,2,3]
my_list[0]=5
print(my_list)		#结果:[5,2,3]#反向下标
my_list=[1,2,3]
my_list[-3]=5
print(my_list)#结果:[5,2,3]

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

my_list=[1,2,3]
my_list.insert(1,"itheima")
print(my_list)		#结果:[1,"itheima",3,4]

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

my_list=[1,2,3]
my_list.append(4)
print(my_list)		#结果:[1,2,3,4]my_1ist=[1,2,3]
my_list.append([4,5,6])
print(my_list)		#结果:[1,2,3,[4,5,6]]

追加元素方式2列表.extend(其它数据容器),将其它数据容器的内容取出,依次追加到列表尾部

my_list=[1,2,3]
my_list.extend([4,5,6])
print(my_list)
#结果:[1,2,3,4,5,6]

删除元素:

  • del 列表[下标]
  • 列表.pop(下标)
  • 删除某元素在列表中的第一个匹配项:列表.remove(元素)
  • 清空列表内容,语法:列表.clear()
my_list=[1,2,3]#方式1
del my_list[0]
print(my_1ist)	#结果:[2,3]#方式2
my_list.pop(0)
print(my_1ist)	#结果:[2,3]
my_list=[1,2,3,2,3]
my_list.remove(2)
print(my_list)#结果:[1,3,2,3]
my_list=[1,2,3]
my_list.clear()
print(my_list)		#结果:[]

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

my_list=[1,1,1,2,3]
print(my_list.count(1))	 	#结果:3

🧊list(列表)的遍历

  • while循环:循环条件为 下标值 < 列表的元素数量

image-20240822221859772

  • for循环

image-20240822221918571

✅数据容器:tuple(元组)

🧊元组的定义

定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。

#定义元组字面量
变量名称=(元素,元素,.....,元素)#定义空元组
变量名称=()			  #方式1
变量名称=tuple()	#方式2

注意事项:

  • 元组只有一个数据,这个数据后面要添加逗号
  • 元组也支持嵌套
#定义3个元素的元组
t1 (1,'Hello',True)#定义1个元素的元组
t2=(He11o',)	#注意,必须带有逗号,否则不是元组类型
#定义一个嵌套元组
t1=((1,2,3),(4,5,6))
print(t1[0][0])		#结果:1

🧊元组的操作

方法作用
index()查找某个数据,如果数据存在返回对应的下标,否则报错
count()统计某个数据在当前元组出现的次数
len(元组)统计元组内的元素个数

注意事项:

  • 元组由于不可修改的特性,所以其操作方法非常少。

  • 可以修改元组内的list的内容(修改元素、增加、删除、反转等)

  • 不可以替换list为其它list或其它类型

#尝试修改元组内容
t1=(1,2,3)
t1[0] = 5 #直接报错!!!
#尝试修改元组内容
t1 (1,2,['itheima','itcast'])
t1[2][1]='best'
print(tl)	#结果:(1,2,['itheima','best'])
#尝试修改元组内容
t1 (1,2,['itheima','itcast'])
t1[2]=[1,2,3]
print(t1) #直接报错!!!

🧊元组的遍历

同列表一样,元组也可以被遍历,可以使用while循环和for循环遍历它。

🧊元组的特点

  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是有序存储的(下标索引)
  • 允许重复数据存在
  • 不可以修改(增加或删除元素等),(但可以修改内部list的内部元素)
  • 支持for循环

多数特性和list一致,不同点在于不可修改的特性。

✅数据容器:str(字符串)

字符串是字符的容器,一个字符串可以存放任意数量的字符。

如,字符串:“itheima”

image-20240824142835720

🧊字符串的下标(索引)

和其它容器如:列表、元组一样,字符串也可以通过下标进行访问

  • 从前向后,下标从0开始
  • 从后向前,下标从-1开始

同元组一样,字符串是一个:无法修改的数据容器。
所以下面操作均无法完成。如果必须要做,只能得到一个新的字符串,旧的字符串是无法修改:

  • 修改指定下标的字符 (如:字符串[0] = “a”)
  • 移除特定下标的字符 (如:del 字符串[0]、字符串.remove()、字符串.pop()等)
  • 追加字符等 (如:字符串.append())

🧊字符串的常用操作

操作说明
字符串[下标]根据下标索引取出特定位置字符
字符串.index(字符串)查找给定字符的第一个匹配项的下标
字符串.replace(字符串1, 字符串2)将字符串内的全部字符串1,替换为字符串2 不会修改原字符串,而是得到一个新的
字符串.split(字符串)按照给定字符串,对字符串进行分隔 不会修改原字符串,而是得到一个新的列表
字符串.strip() 字符串.strip(字符串)移除首尾的空格和换行符或指定字符串
字符串.count(字符串)统计字符串内某字符串的出现次数
len(字符串)统计字符串的字符个数

🧊字符串的遍历

同列表、元组一样,字符串也支持while循环和for循环进行遍历

🧊字符串的特点

  • 作为数据容器,字符串有如下特点:
  • 只可以存储字符串
  • 长度任意(取决于内存大小)
  • 支持下标索引
  • 允许重复字符串存在
  • 不可以修改(增加或删除元素等)
  • 支持for循环

✅数据容器的切片

1.了解什么是序列

2.掌握序列的切片操作

🧊序列

序列是指:内容连续、有序,可使用下标索引的一类数据容器:列表、元组、字符串,均可以可以视为序列。

image-20240824143715887

image-20240824143720131

如图,序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满足这个要求

🧊切片

切片:从一个序列中,取出一个子序列

语法:序列[起始下标:结束下标:步长]

  • 起始下标表示从何处开始,可以留空,留空视作从头开始

  • 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾

  • 步长表示,依次取元素的间隔

    • 步长1表示,一个个取元素
    • 步长2表示,每次跳过1个元素取
    • 步长N表示,每次跳过N-1个元素取
    • 步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)

注意,此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)

序列的切片演示

my_list = [1, 2, 3, 4, 5]
new_list = my_list[1:4]	# 下标1开始,下标4(不含)结束,步长1
print(new_list)				# 结果:[2, 3, 4]
my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:]	 # 从头开始,到最后结束,步长1
print(new_tuple)			 # 结果:(1, 2, 3, 4, 5)
my_list = [1, 2, 3, 4, 5]
new_list = my_list[::2]		# 从头开始,到最后结束,步长2
print(new_list)				   # 结果:[1, 3, 5]
my_str = "12345"
new_str = my_str[:4:2]	# 从头开始,到下标4(不含)结束,步长2
print(new_str)				# 结果:"13"
my_list = [1, 2, 3, 4, 5]
new_list = my_list[3:1:-1]	# 从下标3开始,到下标1(不含)结束,步长-1(倒序)
print(new_list)				     # 结果:[4, 3]
  • 起始可以省略,省略从头开始
  • 结束可以省略,省略到尾结束
  • 步长可以省略,省略步长为1(可以为负数,表示倒序执行)

✅数据容器:set(集合)

1.掌握集合的定义格式

2.掌握集合的特点

3.掌握集合的常见操作

🧊集合的定义

基本语法:

#定义集合字面量
{元素,元素,..,元素}
#定义集合变量
变量名称=元素,元素,..···,元素}
#定义空集合
变量名称=set()

🧊集合的特点

集合最主要的特点就是:不支持元素的重复(自带去重功能)、并且内容无序

可以总结出集合有如下特点:

  • 可以容纳多个数据
  • 可以容纳不同类型的数据(混装)
  • 数据是无序存储的(不支持下标索引)
  • 不允许重复数据存在
  • 可以修改(增加或删除元素等)
  • 支持for循环

🧊集合的常用操作

编号操作说明
1集合.add(元素)集合内添加一个元素
2集合.remove(元素)移除集合内指定的元素
3集合.pop()从集合中随机取出一个元素
4集合.clear()将集合清空
5集合1.difference(集合2)得到一个新集合,内含2个集合的差集 原有的2个集合内容不变
6集合1.difference_update(集合2)在集合1中,删除集合2中存在的元素 集合1被修改,集合2不变
7集合1.union(集合2)得到1个新集合,内含2个集合的全部元素 原有的2个集合内容不变
8len(集合)得到一个整数,记录了集合的元素数量

集合1.difference(集合2):

set1={1,2,3}
set2={1,5,6}
set3 = set1.difference(set2)
print(set3)		#结果:{2,3}	得到的新集合
print(set1)		#结果:{1,2,3}不变
print(set2)		#结果:{1,5,6}不变

集合1.difference_update(集合2):

set1={1,2,3}
set2={1,5,6}
set1.difference_update(set2)
print(set1)	#结果:{2,3}
print(set2)	#结果:{1,5,6}

集合1.union(集合2):

set1={1,2,3}
set2={1,5,6}
set3 set1.union(set2)
print(set3)		#结果:{1,2,3,5,6},新集合
print(set1)		#结果:{1,2,3},set1不变
print(set2)		#结果:{1,5,6},set2不变

🧊集合的常用操作

只支持for循环遍历,集合不支持下标索引,所以也就不支持使用while循环。

set1={1,2,3}
for i in set1:
print(i)
#结果
1
2
3

✅数据容器:dict(字典、映射)

为什么需要字典?Python中字典和生活中字典十分相像,因为可以使用字典,实现用key取出Value的操作

image-20240824151538171

🧊字典的定义

字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:

#定义字典字面量
{key:value,key:value,......key:value}
#定义字典变量
my_dict = {key:value,key:value,......key:value}
#定义空字典
my_dict = {}	#空字典定义方式1
my_dict = dict()	#空字典定义方式2
  • 使用{}存储原始,每一个元素是一个键值对
  • 每一个键值对包含Key和Value(用冒号分隔)
  • 键值对之间使用逗号分隔
  • Key和Value可以是任意类型的数据(key不可为字典)
  • Key不可重复,重复会对原有数据覆盖

字典数据的获取:

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

#语法,字典[Key]可以取到对应的Va1ue
stu_score={"王力鸿"99"周杰轮"88"林俊节"77}
print(stu_score["王力鸿"])	#结果99
print(stu_score["周杰轮"])	#结果88
print(stu_score["林俊节"])	#结果77

字典的嵌套:

字典的嵌套有点像json数据结构,注意字典的Key和Value可以是任意数据类型(Key不可为字典)

image-20240824152131556

stu_score = {
"王力鸿"{"语文"77"数学"66"英语"33}"周杰轮"{"语文"88"数学"86"英语"55}"林俊节"{"语文"99"数学"96"英语"66}
}print(stu_score["王力鸿"])				  #结果:{"语文":77,"数学":66,"英语":33]
prnt(stu_score["王力鸿"]["语文"])	#结果:77
print(stu_score["周杰轮"]["数学"])	#结果:86

字典的注意事项:

  • 键值对的Key和Value可以是任意类型(Key不可为字典)
  • 字典内Key不允许重复,重复添加等同于覆盖原有数据
  • 字典不可用下标索引,而是通过Key检索Value

🧊字典的常用操作

1.掌握字典的常用操作

2.掌握字典的特点

编号操作说明
1字典[Key]获取指定Key对应的Value值
2字典[Key] = Value添加或更新键值对
3字典.pop(Key)取出Key对应的Value并在字典内删除此Key的键值对
4字典.clear()清空字典
5字典.keys()获取字典的全部Key,可用于for循环遍历字典
6len(字典)计算字典内的元素数量

新增元素:语法:字典[Key] = Value,结果:字典被修改,新增了元素

stu_score = {
"王力鸿"77"周杰轮"88"林俊节"99
}
#新增:张学油的考试成绩
stu_score['张学油'] = 66
print(stu_score)	#结果:{王力鸿':77,·周杰轮:88,林俊节':99,张学油':66}

**更新元素:**语法:字典[Key] = Value,结果:字典被修改,元素被更新

  • 注意:字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value值
stu_score = {
"王力鸿"77"周杰轮"88"林俊节"99
}
#更新:王力鸿的考试成绩
stu_score['王力鸿']=100
print(stu_score)	#结果:{'王力鸿':100,'周杰轮':88,林俊节':99}

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

stu_score = {
"王力鸿"77"周杰轮"88"林俊节"99
}
Va1ue=stW_score.pop("王力鸿")
print(value)			#结果:77
print(stu_score)	#结果:{"周杰轮":88,"林俊节":99}

清空字典:

stu_score = {
"王力鸿"77"周杰轮"88"林俊节"99
}
stu_score.clear()
print(stu_score)#结果:{}

获取全部的key:

stu_score = {
"王力鸿"77"周杰轮"88"林俊节"99
}
keys stu_score.keys()
print(keys)		#结果:dict_keyS(['王力鸿','周杰轮','林俊节'])

遍历字典:

stu_score = {
"王力鸿"77"周杰轮"88"林俊节"99
}
keys stu_score.keys()
for key in keys:
print(f"学生:{key},分数:{stu_score[key]}")

✅数据容器对比总结

数据容器可以从以下视角进行简单的分类:

  • 是否支持下标索引

    • 支持:列表、元组、字符串 - 序列类型
    • 不支持:集合、字典 - 非序列类型
  • 是否支持重复元素:

    • 支持:列表、元组、字符串 - 序列类型

    • 不支持:集合、字典 - 非序列类型

  • 是否可以修改

    • 支持:列表、集合、字典

    • 不支持:元组、字符串

数据容器特点对比:

图片1

基于各类数据容器的特点,它们的应用场景如下:

  • 列表:一批数据,可修改、可重复的存储场景
  • 元组:一批数据,不可修改、可重复的存储场景
  • 字符串:一串字符串的存储场景
  • 集合:一批数据,去重存储场景
  • 字典:一批数据,可用Key检索Value的存储场景

✅数据容器的通用操作

功能描述
通用for循环遍历容器(字典是遍历key)
max容器内最大元素
min()容器内最小元素
len()容器元素个数
list()转换为列表
tuple()转换为元组
str()转换为字符串
set()转换为集合
sorted(序列, [reverse=True])排序,reverse=True表示降序 得到一个排好序的列表


在这里插入图片描述

📖入门思维导图

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分布式云扩展 AI 边缘算力,助力用户智能化创新
  • [Linux#47][网络] 网络协议 | TCP/IP模型 | 以太网通信
  • Apache RocketMQ 中文社区全新升级丨阿里云云原生 7 月产品月报
  • Xor Sigma Problem
  • CSS系列之浮动清除clear(三)
  • 数据库mysql集群主从、高可用MGR、MHA技术详解
  • Go 语言生产服务故障案例精析
  • 黑马JavaWeb开发笔记09——ElementUI代码引入教程、Element常用组件使用(Table, Pagination, Dialog, Form)
  • python爬虫源码:selenium+browsermobproxy实现浏览器请求抓取
  • 7- 排序算法
  • 如何本地搭建Whisper语音识别模型
  • netty之ChannelOption
  • 数据库入门: 从 0 到 1 理解数据管理
  • Visual Basic:企业级应用开发的稳健之选
  • Dubbo ZooKeeper Spring Boot整合
  • [译] React v16.8: 含有Hooks的版本
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • classpath对获取配置文件的影响
  • EOS是什么
  • IndexedDB
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript创建对象的四种方式
  • JavaScript函数式编程(一)
  • Js基础知识(一) - 变量
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Mysql数据库的条件查询语句
  • react 代码优化(一) ——事件处理
  • Redis 懒删除(lazy free)简史
  • SQLServer插入数据
  • underscore源码剖析之整体架构
  • 测试开发系类之接口自动化测试
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 国内开源镜像站点
  • 进程与线程(三)——进程/线程间通信
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #LLM入门|Prompt#3.3_存储_Memory
  • $.ajax()参数及用法
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (蓝桥杯每日一题)love
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ***php进行支付宝开发中return_url和notify_url的区别分析