组合数据类型概述
组合数据额类型为多个同类型或不同类型数据提供单一表示。组合数据类型分3类:序列类型、集合类型、映射类型
- 基本数据类型:表示单一数据类型
- 组合数据类型:能够表示多个数据的类型
三种数据类型
- 序列类型:是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他(可以有重复项)
- 集合类型:一个元素集合,元素之间无需,相同元素在集合中唯一存在
- 映射类型:“键-值”数据项的组合,每个元素是一个键值对,表示为(key,value)
序列类型
序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。序列的基本思想和表示方法均来源于数学概念
由于元素之间存在顺序关系,所以序列中可以存在数值相同但位置不同的元素。序列类型支持成员关系操作符(in)、长度计算函数(len())、分片([]),元素本事也可以是序列类型
三种比较重要的类型及其特点
Python语言中有很多数据类型都是序列类型,不过比较重要的有三种:str(字符串)、tuple(元祖)、list(列表)
- 字符串:字符串可以看成是单一字符的有序组合,属于序列类型,同时因为序列经常用一个字符串表示一个含义,也被看作是基本数据类型
- 元组:是包含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个元素的子序列(不包含第j个元素),以k为步数 |
len(s) | 序列s的元素个数(长度) |
min(s) | 序列s中的最小元素 |
操作符 | 描述 |
---|---|
max(s) | 序列s中的最大元素 |
s.index(x[,i[,j]]) | 序列s中从i开始到j位置中第一次出现元素x的位置 |
s.count(x) | 序列s中出现x的总次数 |
生成元组只需要使用逗号将元素隔离开即可,一个元组可以作为另一个元组的元,可以采用多级索引获取信息。
元组除了用于表达固定数据项外,还常用于3种情况:函数多返回值、多变量同步赋值、循环遍历
集合类型
和数学中集合的特点一样,集合中的元素不能重复,元素类型只能是固定数据类型:整数、浮点数、字符串、元组等。
而列表,字典和集合类型本身都是可变数据类型,不能作为集合的元素出现
哈希运算
哈希运算可以将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是对数据的一种有损且紧凑的表示形式。Python提供了一个内置的hash()函数来计算数据的哈希值
哈希值与哈希前的内容无关,也与这些内容的组合无关,可以说,哈希值是在另一维度的数据。
结合类型的操作
由于集合是无序组合,它没有索引和位置的概念,不能分片,集合中元素可以动态增加或删除。集合用大括号({})表示,可以用赋值语句生成一个集合
集合类型的操作数
操作数 | 描述 |
---|---|
S_T或S.difference(T) | 返回一个新集合,包括在集合S中但不在集合T中的元素 |
S-=T或S.difference_update(T) | 更新集合S,包括在集合S中但不在集合T中的元素 |
S&T或S.intersection(T) | 返回一个新的集合,包括同时集中在集合S和T中的元素 |
S&=T或intersction_update(T) | 更新集合S,包括同时集中在集合S和T中的元素 |
s^T或s.symmetric_difference(T) | 返回一个新集合,包括集合S和T中的元素但不包括同时在其中的元素 |
S^=T或s.symmetric_difference_update(T) | 更新集合S,包括集合S和T中的元素但不包括同时在其中的元素 |
S|T或S.union(T) | 返回一个新的集合,包括S和T中的所有元素 |
S|=T或S.update(T) | 更新集合S,包括S和T中的所有元素 |
S<=T或S.issubset(T) | 如果S与T相同或S是T的子集,返回True,否则返回False |
操作数 | 描述 |
---|---|
S>=T或S.issuperset(T) | 如果S与T相同或S是T的超级,返回True,否则返回False |
集合类型的操作函数或方法
操作函数或方法 | 描述 |
---|---|
S.add(x) | 如果数据项x不在集合S中,将x增加到S |
S.clear() | 移除S中的所有数据项 |
S.copy() | 返回一个集合S的副本 |
S.pop() | 随机返回集合S中的一个元素,如果S为空,产生KeyError异常 |
S.discard(x) | 如果x在集合S中,移除该元素;如果x不在集合S中,不报错 |
S.remove(x) | 如果x在集合S中,移除该元素;不在则产生KeyError异常 |
S.isdisjoint(T) | 如果集合S与T没有相同元素,返回True |
len(S) | 返回集合S的元素个数 |
x in S | 如果x是S的元素,返回True,否则返回False |
操作函数或方法 | 描述 |
---|---|
x not in S | 如果x不是S的元素,返回True,否则返回False |