《Python3智能数据分析快速入门》—2.3.2 复合数据类型
2.3.2 复合数据类型
计算机语言中的容器是指根据某种方式组合数据元素形成的数据元素集合。Python中的容器包含序列、映射和集合,几乎所有的Python容器都可以归结为这3类。
序列是数据对象的有序排列,数据对象作为序列中的元素被分配了一个位置编号(索引),序列相当于数学中数列的概念。Python中的序列包括str、list、tuple、Unicode字符串、buffer对象等,其中的str、list、tuple最为常用。
映射是包含一组键(key)和值(value)以及映射关系的容器,字典(dictionary)是Python中唯一的映射类型,字典中的每个元素都存在相应的名称(称为键)与之一一对应。字典相当于由带有各自名称的元素组成的集合,与序列不同的是,字典中的元素并没有排列顺序。
在集合类型数据中,集合中的元素不能重复出现,当中的元素是唯一的,元素间不存在排列顺序,Python中的集合相当于数学中的集合概念。集合类型包括可变集合(set)与不可变集合(frozenset)。
1. list
list又称为列表,属于序列类数据,是包含0或多个对象引用的有序序列。由于list中所有的数据项都是对象引用,因此list可以存放任意数据类型的数据项,既可以是int、f loat、str等这种基础数据类型,也可以是list、tuple、dict等这一类的复合数据类型。list是Python中最通用的复合数据类型。
list可以用方括号“[ ]”创建:空的方括号创建空的list;包含多个项的list可以在方括号中使用逗号分隔的项序列创建。也可以通过list函数创建,list函数最多接收一个参数;不带参数调用函数时返回空list;带参数时返回参数的浅拷贝(在有指针的情况下,浅拷贝只是增加了一个指针,指向已经存在的内存);对复杂参数(非基本元素,如复合数据类型)则尝试将给出的对象转换为list。list的创建如代码清单2-26所示。
代码清单2-26 创建list
索引、连接及重复操作是灵活运用list这一数据类型的基础。list的这3种操作的方式和str对应操作类似,如代码清单2-27所示。
代码清单2-27 list基本操作
Python为list提供了一些内置方法,可以实现list的查询、增删和排序等功能,如表2-14所示。
表2-14 list常用方法
表2-17所示的方法使用示例如代码清单2-28所示。
代码清单2-28 list常用方法
2. tuple
tuple又称元组,与list同属于序列类数据,是包含0个或多个对象引用的有序序列。与list不同的是,tuple是不可更改的数据类型。
tuple可以用圆括号( )创建:空的圆括号创建空的tuple;包含一个或多个项的tuple可以使用逗号分隔开元素;如果tuple内只包含一个元素,需要在元素后加上逗号予以区分。有时,tuple必须被包含在圆括号中以避免语义二义性。例如,要将tuple(1,2,3)传递给一个函数,应该写成function((1,2,3))的形式,以免被识别成“1,2,3”这3个数字变量。创建tuple的方法如代码清单2-29所示。
代码清单2-29 创建tuple
tuple支持索引,其索引方式与str、list类似。与list相同的是,tuple也可以进行连接、重复操作;与list不同的是,tuple中的元素无法做增删操作,只能使用del函数删除整个tuple。tuple基本操作如代码清单2-30所示。
代码清单2-30 tuple基本操作
Python为tuple提供的内置方法较少,主要用于查询,如表2-15所示。
表2-15 tuple内置方法
tuple内置方法的基本使用如代码清单2-31所示。
代码清单2-31 tuple内置方法
3. dict
dict又称字典,属于映射类数据。dict通过键而不是位置来索引。键是不可变对象(如number、str、tuple)的对象引用,值是可以指向任意类型对象的对象引用。dict是Python中唯一一种映射数据类型,具有可变性,dict的长度可以增大或减小,如同list一样。dict的值可以无限制地取任何Python对象,既可以是Python内置的标准数据,也可以是用户定义的。同一个键不允许出现两次,创建dict时如果同一个键被赋值两次,只有后一个值会被记住。键固定不变,所以只能用number、str或tuple充当。注意,可变的数据类型不能充当dict中的键。
dict可以用花括号{}创建:使用空的花括号创建空的dict;非空的花括号包含一个或多个逗号分隔的项,每个项包含一个键、一个冒号以及一个值。通过dict函数也可以创建dict:不带参数时返回一个空的dict;带一个映射类型参数时返回以该参数为基础的dict,当参数本身为dict时返回该参数的浅拷贝;也可以使用序列型参数,前提是序列中的每个项是包含两个对象的序列,第1个作为键,第2个作为值。创建dict,如代码清单2-32所示。
代码清单2-32 创建dict
dict的主要索引方式是通过键索引值,这与str等变量截然不同。通过dict的索引功能,可以实现dict的查改增删,且不需要用到Python提供的内置方法,如代码清单2-33所示。
代码清单2-33 dict基础操作
Python为dict提供了丰富的内置方法,通过内置方法也可以实现查询、增删和创建,如表2-16所示。
表2-16 dict常用方法
dict的常用操作示例如代码清单2-34所示。
代码清单2-34 dict常用操作
4. set
Python中有两种内置集合类型:set(可变集合)和frozenset(不可变集合)。set是引用零个或多个对象的无序组合,所引用的对象都是不可变的,所有内置的固定数据类型(如f loat、frozenset、int、str、tuple)都是不可变的。以下所指的集合都是set。
set可以使用花括号{}或set函数创建。使用花括号{}创建集合时使用{}包裹一个或多个项,项与项间用“,”分割;空的set无法用{}创建。使用set函数创建set时,不带参数时返回空set;带一个参数时返回参数的浅拷贝;带多个参数时,则尝试将给定的对象转换为set,如代码清单2-35所示。
代码清单2-35 创建set
set是可变的,但由于其中的项是无序的,因此没有索引的概念。set可变而无法索引,这使得它无法进行查询和修改元素的操作,但仍支持元素的增删,并可以清空和拷贝。set的常用操作基本都需要通过内置方法,如表2-17所示。
表2-17 set内置方法
set常用方法示例如代码清单2-36所示。
代码清单2-36 set常用方法
set起源于数学,与数学集合相似,Python中的set也有子集、并集、交集、差集和对称差集等概念,并能进行集合运算,它们的定义和操作方法如表2-18所示。
表2-18 set的集合运算
set集合运算的基本操作方法如代码清单2-37所示。
代码清单2-37 set集合运算
- 点赞
- 收藏
- 关注作者
评论(0)