python 数据容器:列表、元组、字符串、集合、字典
一、列表
1、列表的定义
变量名称 = []
变量名称 = list()
变量名称 = [变量1,变量2,.....]
列表可以依次存储多个数据,也可以为不同的数据类型,支持嵌套。
2、列表的下标索引
从前往后,编号从0开始递增
从后往前,编号从-1开始递减
3、列表的常用操作
①查找
列表.index(元素) #返回该元素的索引值
②插入
列表.insert(下标元素) #在指定位置插入
列表.append(元素) #追加在尾部
列表.extend(其他的数据容器) #将一系列的数据追加在尾部
③删除
del 列表[下标]
列表.pop(下标) #删除并返回该元素
列表.pop() #删除列表末尾元素
列表.remove #删除某元素在列表中第一个匹配项
列表.clear() # 清空列表
④统计数目
列表.count(元素) #列表中某元素的数目
len(列表) # 列表中所有元素的数目
⑤排序
列表.sort() #对列表进行永久排序
列表.sort(reverse=True) #对列表进行永久排序(反向)
列表.sorted() #对列表进行临时排序
列表.sorted(reverse=True) #对列表进行临时排序(反向)
切片
即使用列表的一部分
列表[m:n] #从列表下标索引m到n-1提取列表
列表[:n] #从列表开头取到索引值为n-1
列表[n:] #从列表索引值n开始取到列表末尾
列表[-n:] #提取列表最后n个元素
列表[:] #复制列表
二、元组
不可变的列表
1、元组的定义
元组名 = () #空元组
元组名 = tuple() #空元组
元组名 = (元素,) #定义只包含一个元素的元组,逗号不能省
元组名 =(元素1,元素2,.........)
2、元组的特点
无法修改元组内元素的值,但元组内如果嵌套了列表,则可修改列表中的值
无法修改元组内元素的值,但可以给表示元组的变量重新赋值
三、字符串
1、字符串的定义
字符串名='字符串' #使用单引号定义
字符串名=''字符串'' #使用双引号定义
字符串名='''字符串''' #使用三引号定义(可定义多行字符串)
2、字符串的特点
字符串是字符的容器,一个字符串可以存放任意数量的字符
同元组一样,字符串是一个无法修改的数据容器
字符串可以进行下标索引访问
3、字符串的常用操作
①查找
字符串.index(元素) #返回该元素的起始位置的索引值(索引值从零开始)
str = "A and B"
value = str.index("and") #value为2
②修改
注意:不是修改字符串的本身,而是得到一个新的字符串
# 把字符串A中所有的字符串1都替换成字符串2
字符串A.replace(字符串1,字符串2)
③分隔
注意:按照指定字符串分割字符串,将字符串分为多个字符串,并存入列表对象中。字符串本身不变,而是得到了一个列表对象
字符串.split(分隔字符串)
④规整操作
字符串.strip() #去前后空格
字符串.strip(字符串) #去前后指定字符串
str="12计算机科学与技术专业21"
print(str.strip("12")) #"计算机科学与技术专业"
上例中,需要格外注意的是,传入的字符串”12“,其实是按照单个字符进行移除,其中"1"和"2"都会被移除!!!!
⑤统计数目
字符串名.count("字符串") #可返回某个字符或字符串在整个字符串里的数目
len(字符串名) #字符串长度
序列
指内容连接、有序,可使用下标索引的一类数据容器如:列表、元组、字符串
列表常用操作-----切片
切片:从一个序列中取出一个小序列
序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列;
步长:表示每次跳过n-1个元素取值
当步长为负数时,即反向取值。起始下标和结束下标也要反向
(如[3:1:-1],即先取索引值为3的值,然后反向取值,取索引值为2的值,包前不包后,即取值结束)
str1="12计算机科学与技术专业21"
print(str1[3:1:-1]) #输出结果为:算计
#序列切片:从str1字符串中得到"计算机科学与技术专业"
str1="321,业专术技与学科机算计,56"
# 第一种方法:先进行倒序,再进行取值
str2=str1[::-1][5,11]
# 第二种方法: 先取值再进行倒序
str3=str1[5,11][::-1]
# 第三种方法: 用split分割,replace替换“去”为空,再进行倒序
str4=str1.split(",")[1].replace("去"."")[::-1]
四、集合
1、集合的特点
不允许重复元素,无序,不支持下标索引访问,不是序列,允许修改
不能使用while循环遍历,可以用for循环
2、集合的定义
集合名={元素1,元素2,......}
3、集合的常用操作
① 添加
集合名.add(元素)
② 移除
#移除元素
集合名.remove(元素)
#从集合中随机取出一个元素并移除
集合名.pop()
③ 清空
集合名.clear()
④ 合并
# 将集合1和集合2合并,得到新的集合,集合1和集合2不变
集合1.unior(集合2)
⑤ 比较
#得到一个新集合(内含有集合1里存在的,但集合2中无的元素),原有的两个集合不变
集合1.difference(集合2)
# 在集合1中,删除和集合2中相同的元素,集合1被修改、集合2不变
集合1.difference_updata(集合2)
⑥ 统计数目
len(集合)
五、字典
1、字典的性质
基于key检索value;键值对的key和value,可以是任意类型(key不能为字典类型)
字典中的key值不允许重复,重复添加相当于覆盖原有的数据
不能通过使用下标索引,而是通过key检索value
字典会保留定义时的元素排列顺序
2、字典的定义
字典名={key:value,key:value,....}
# 定义空字典
字典名={}
字典名=dict()
3、字典的常用操作
① 新增/更新
字典名[key]=value
② 删除
字典名.pop(key) #删除元素,并返回被删除的元素值
③ 清空
字典名.clear()
del 字典名[key]
④ 获取全部的key值
字典名.keys() #返回值是是列表类型
⑤获取全部的value值
字典名.values() #返回值是列表类型
⑤遍历
方法1:直接for循环
for key in 字典名:
print(f"{key}对应的value值是:{字典名.[key]}")
方法2: 先获取全部的key值
for key in 字典名.keys():
print(f"{key}对应的value值是:{字典名.[key]}")
⑥ 统计数目
len(字典) # 计算字典中的元素数量
数据容器总结
1、容器的通用操作
① 统计数目
len(容器名)
② 最大/小值
max(容器名)
min(容器名)
③ 转换
list(容器) # 将给定容器转换为列表
str(容器) # 将给定容器转换为字符串
tuple(容器) # 将给定容器转换为元组
set(容器) # 将给定容器转换为集合,会自动去重,无序
注意:
字典转换为其他类型时,除去str类型,都会丢失Value值
字符串转换时,会将每个字符作为元素
④ 排序
sorted(容器) # 正向排序(从小到大)
sorted(容器,[reverse=True]) # 反向排序(从大到小)
注意:字符串的比较是按位比较,一位位比较,只要有一位大,那么整体就大
五类数据容器的比较
列表(list) | 元组(tuple) | 字符串(str) | 集合(set) | 字典(dict) | |
元素数量 | 支持多个 | 支持多个 | 支持多个 | 支持多个 | 支持多个 |
元素类型 | 任意 | 任意 | 字符 | 任意 | Key:Value Key:除字典外任意类型 Value:任意类型 |
下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
可修改性 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
数据有序 | 是 | 是 | 是 | 否 | 否 |
使用场景 | 可修改、可重复的一批数据记录场景 | 不可修改、可重复的一批数据记录场景 | 一串字符串的记录场景 | 可修改、不可重复的数据场景 | 以Key检索Value的数据记录场景 |