时间:2021/09/04
文章目录
1.组合数据类型的基本概念
计算机不仅能对单个变量表示的数据进行处理,通常情况,计算机更需要对一组数据进行批量处理。这种能够表示多个数据的类型称为组合数据类型。
- python中最常用的组合数据类型有3大类
- 集合类型
- 是一个元素集合,元素之间无序,相同元素在集合中唯一存在
- 序列类型
- 是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他。
- 序列类型的典型代表是字符串类型和列表类型
- 映射类型
- 是“键-值”数据项的组合,每个元素是一个键值对,表示为(key,value)
- 映射类型的典型代表是字典类型
- 集合类型
- 集合类型是一个具体的数据类型名称,而序列类型和映射类型是一类数据类型的总称。
1.1 集合类型概述
- 集合类型与数学中的集合概念一致,即包含0个或多个数据项的无序组合。
- 集合是无序组合,用大括号{}表示,没有索引和位置的概念,集合中的元素可以动态增加或删除。
- 集合中的元素不可重复,元素类型只能是不可变数据类型,如整数,浮点数,字符串,元组等,
- 列表,字典和集合类型本身都是可变数据类型,不能作为集合中的元素出现
注:
- 由于集合元素是无序的,集合的输出顺序与定义顺序可以不一致
- 由于集合元素独一无二,使用集合类型能够过滤掉重复元素
- 集合元素间没有顺序,不能比较,不能排序。
创建集合直接使用“{}”
尽管集合中的元素是不可重复的,但集合元素在输入时是不受限制的。元素在输入集合后会自动去重。
操作符及运算 | 效果 |
---|---|
S - T | 返回一个新集合,包括在集合S中但不再集合T中的元素 |
S & T | 返回一个新集合,包括同时在集合S和T中的元素 |
S ^ T | 返回一个新集合,包括集合S和T中非共同元素 |
返回一个新集合,包括集合S和T中所有元素 |
s={1,2,3}
t={3,4,5}
# 输出交集
print('交集',s&t)
# 输出补集
print('补集',s^t)
# 输出并集
print('并集',s|t)
# 输出差集
print('差集',s-t)
集合类型常用的操作函数或方法
函数或方法 | 效果 |
---|---|
s.add(x) | 如果数据项x不在集合s中,将x增加到s |
s.remove(x) | 如果数据项x在集合s中,移除该元素,不在则产生KeyError的异常 |
s.clear() | 移除s中所有数据项 |
len(s) | 返回集合s的元素个数 |
x in s | 如果x是s的元素,返回True,否则返回False |
x not in s | 如果x不是s的元素,返回True,否则返回False |
- set(x)函数将其他的组合数据类型变成集合类型,返回结果是一个无重复且排序任意的集合。
- set()函数也可以生成空集合变量
# 定义一个空集合
# 区别定义一个空字典 s={}
s=set({})
# 添加一个元素
s.add(16)
print(s)
# 移除一个元素
s.remove(16)
print(s)
# 添加两个元素
s={6,8,16}
print(s)
# 集合的长度
print(len(s))
# 清楚所有元素
s.clear()
print(s)
集合类型主要用于元素去重,适合于任何组合数据类型
s=set('上海自来水来自上海')
print(s)
for i in s:
print(i,end='')
1.2 序列类型概述
- 序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。
- 在数学中,经常给每个序列起一个名字,如n个数的序列s,可以表示为:s=s0,s1,s3=2,…,sn-1
- 当需要访问序列中某个特定值,只需通过下标标出即可。如查找序号为2的元素,可通过s[2]获得。序列的下标从0开始编号。
- 由于元素之间存在顺序关系,所以序列中可以存在数值相同但位置不同的元素。典型的是字符串类型、列表类型和元组类型。
- 字符串类型可以看成是单一字符串的有序集合,属于序列类型。列表则是一个可以使用多种类型元素的序列类型。
- 序列类型各个具体类型使用相同的索引体系,与字符串类型一样,即正向递增序号和反向递减序号。
序列类型的操作符和函数
操作符 | 作用 |
---|---|
x in s | 如果x是s的元素,返回True,否则返回False |
x not in s | 如果x不是s的元素,返回True,否则返回False |
s + t | 连接s和t |
s * n或n * s | 将序列s复制n次 |
s[i] | 索引,返回序列的第i个元素 |
s[i:j] | 切片,返回包含序列s的第i到j个元素的子序列(不包含第j个元素) |
s[i:j:k] | 步骤切片,返回包含序列s的第i到j个元素,以k为步长的子序列 |
len(s) | 序列s的元素个数(长度) |
min(s) | 序列s中的最小元素 |
max(s) | 序列s中的最大元素 |
s.index(x) | 序列s中第一次出现元素x的位置 |
s.count(x) | 序列s中出现x的总次数 |
1.2.1元素类型
元组类型是序列类型的重要组成之一。元组类型在python中表示为tuple,一般以小括号和逗号进行组织。
元组类型严格遵循序列类型的操作定义,可以使用序列类型的操作符和函数
注:
- 元组类型一旦定义就不能修改,不够灵活
- 元素类型的所有操作都可以由列表类型实现。
元组类型主要在python语法相关的场景使用,如当函数返回多个值时,多个返回值以元素类型返回,实际返回一个数据类型
1.3 映射类型概述
- 映射类型是“键-值”数据项组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。
- 键值对(key,value)是一种二元关系,源于属性和值的映射关系
- 映射类型是序列类型的一种扩展。在序列类型中,采用从0开始的正向递增序号进行具体元素值的索引。而映射类型则由用户定义序号,即键,用键去索引具体的值
- 键(key)表示一个属性,也可以理解为一个类别或项目,值(value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。
2.列表类型
2.1 列表的定义
- 列表类型是包含0个或多个元素的有序序列,属于序列类型。
- 列表可以进行元素的增加,删除,替换,查找等操作。列表没有长度限制,元素类型可以不同。
- 列表类型用中括号[]表示,也可以通过list(x)函数将集合或字符串类型转换成列表类型。list()函数可生成空列表
- 由于列表属于序列类型,所以列表类型支持序列类型对应的操作
2.2 列表的索引
- 索引是列表的基本操作,用于获取列表中一个元素。该操作沿用序列类型的索引方式,即正向递增序号和逆向递减序号
- 使用中括号作为索引操作符,索引序号不能超过列表的元素范围,否则会产生IndexError的错误。
- 可以使用遍历循环对列表类型的元素进行遍历操作。
- 语法格式:
for 循环变量 in 列表变量:
语句块
# 遍历操作列表内容
lst=[100,'131',[101,'624'],100]
for i in lst:
print(i*2)
# 遍历输出列表内容
lst=[100,'131',[101,'624'],100]
for i in range(len(lst)):
print(lst[i])
2.3 列表的切片
- 切片是列表的基本操作,用于获取列表的一个片段,即获得0个或多个元素。切片后的结果也是列表类型。
- 切片的两种使用方式:
- 列表或列表变量[N:M]
- 列表或列表变量[N: M :K]
注:python在[]中表示曲线使用":",如切片;表示枚举使用逗号",",如列表
- 切片获取列表类型从N到M(不包括M)的元素组成新的列表,其中,N和M为列表类型的索引序号
- 可以混合使用正向递增序号和逆向递减序号,一般要求N小于M。当N大于等于M时,返回空列表。
- 当K不存在时,切片获取列表类型从N到M(不包含M)以K为步长所对应元素组成的列表。
2.4列表类型的操作
2.4.1 列表的操作函数
操作函数 | 效果 |
---|---|
len(lst) | 列表lst元素个数(长度) |
min(lst) | 列表lst中的最小元素 |
max(lst) | 列表lst中的最大元素 |
list(x) | 将x转换成列表类型,x可以是字符串类型,也可以是字典类型 |
2.4.2 列表的操作方法
语法格式:
列表对象.方法名(参数列表)
方法 | 效果 |
---|---|
lst.append() | 在列表lst最后增加一个元素x |
lst.insert(i,x) | 在列表lst第i个位置增加元素x |
lst.clear() | 删除lst中所有元素 |
lst.pop(i) | 将列表lst中第i项元素取出并从lst中删除该元素 |
lst.remove(x) | 将列表中出现的第一个元素x删除 |
lst.reverse() | 将列表lst中的元素反转 |
lst.copy() | 生成一个新的列表,复制lst中所有的元素 |
- 列表的方法主要针对列表对象,实现列表的元素的增、删、改等功能
- 复制之后,对复制列表进行操作,不影响原有列表
除上述方法外,还可以使用del关键字对列表元素或片段进行删除
语法格式:
del 列表对象[索引序号]
del 列表对象[索引起始:索引结束]
del 列表对象[索引起始:索引结束:步长]
3.字典类型
3.1 字典的定义
- python中的字典使用大括号”{}“建立,每个元素是一个键值对
- 语法格式:
{键1:值1,键2:值2,键3:值3,...,键N:值N}
- 键和值通过冒号连接,不同键值对通过逗号隔开。
- 键可以是int类型,string类型,不可以是list(列表)类型
- 某种角度来说,字典类型也具有和集合类似的性质,即键值对(元素)之间没有顺序且不能重复。可以简单地把字典看成元素是键值对的集合。
# d可以看作是"学号"与"姓名"的映射关系
# 即一个学号对应一个姓名
# 字典各元素没有顺序之分
d={'202101':'张三','202102':'李四','202103':'王五'}
print(d)
对比字典与集合:
字典类型和集合类型形式上都采用大括号表示,但如果直接使用大括号{},则生成字典类型,而不是集合类型
# 集合类型
s={1,2,3}
print(type(s))
# 字典类型
d={'202101':'张三','202102':'李四','202103':'王五'}
print(type(d))
# 定义空集合
s=set()
print(type(s))
# 定义空字典
d={}
e=({})
print(type(d))
print(type(e))
3.2 字典的索引
- 索引是按照一定顺序检索内容的体系。列表类型采用元组顺序的位置进行索引。由于字典元素是“键值对”,即键是值的索引,因此,可以直接利用键值对关系索引元素。
- 字典中键值对的索引语法:
值 = 字典对象[键]
d={'201':'张三','202':'李四','203':'王五'}
name=d['202']
print(name)
- 利用索引和赋值配合,可以对字典中元素进行修改,也可以向其中添加元素
d={'201':'张三','202':'李四','203':'王五'}
# 修改
d['202']='李大人'
# 添加
d['204']='小刘'
print(d)
- 字典是存储可变数据量键值对的数据结构,键和值可以是任意数据类型,通过键索引和修改值。
3.3字典类型的操作
3.3.1 字典的操作函数
操作函数 | 效果 |
---|---|
len(d) | 字典d的元素个数(长度) |
min(d) | 字典d中键的最小值 |
max(d) | 字典d中键的最大值 |
dict() | 生成一个空字典 |
d={'201':'张三','202':'李四','203':'王五'}
print(d)
# 键的最小值
print(min(d))
# 键的最大值
print(max(d))
# 元素个数
print(len(d))
3.3.2 字典的操作方法
操作方法 | 效果 |
---|---|
d.keys() | 返回所有的键信息 |
d.values() | 返回所有的值信息 |
d.items() | 返回所有键值对 |
d.get(key,default) | 键存在则返回相应值,否则返回默认值default |
d.pop(key,default) | 键存在则返回响应值,同时删除键值对,否则返回默认值default |
d.popitem() | 随机从字典中取出一个键值对,以元组(key,value)形式返回,同时将该键值对从字典中删除 |
d.clear() | 删除所有的键值对,清空字典 |
注:字典的值:
- 字典类型没办法直接通过值进行索引,这是键值对定义的约束
- d.keys()返回字典中所有的键信息,返回结果是python的一种内部数据类型dict_keys,专用于表示字典的键
d={'201':'张三','202':'李四','203':'王五'}
# 输出字典的键
print(d.keys())
# 输出keys的数据类型
print(type(d.keys()))
- d.values()返回字典中的所有信息,返回结果是python的一种内部数据类型dict_values
d={'201':'张三','202':'李四','203':'王五'}
# 输出字典的键
print(d.values())
# 输出keys的数据类型
print(type(d.values()))
d={'201':'张三','202':'李四','203':'王五'}
# 输出字典的键
print(d.items())
# 输出keys的数据类型
print(type(d.items()))
d={'201':'张三','202':'李四','203':'王五'}
# 输出键对应的值
print(d.get('201'))
print(d)
# 输出对应值并删除
print(d.pop('201'))
print(d)