Python中的组合数据类型

计算机不仅能对单个变量表示的数据进行处理,通常情况下,计算机更需要对一组数据进行批量处理。这种能够表示多个数据的类型称为组合数据类型。Python语言最常用的组合数据类型有3大类,分别是集合类型、序列类型和映射类型。

集合类型是一个元素集合,元素之间无序,相同元素在集合中唯一存在。

序列类型是一个元素向量,元素之间存在先后关系,通过序列号访问,元素之间不排他。序列类型的典型代表是字符串类型和列表类型。

映射类型是“键-值”数据项的组合,每一个元素是一个键值对,表示为(key,value)。映射类型的典型代表是字典类型。集合类型是一个具体的数据类型,而序列类型和映射类型都是一类数据类型的总称。

1、集合类型概述

Python语言中的集合类型与数学中的集合概念一致,即包含0个或多个数据项的无序组合。集合是无序组合,用大括号({ })表示,他没有索引和位置的概念,集合中的元素可以动态的增加和删减。

集合中的元素不可重复,元素类型只能是不可变数据类型,例如整数、浮点数、字符串、元组。相比而言,列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。

创建集合直接用大括号表示,集合间没有顺序,不能比较,不能排序。如果向集合输入重复的元素,会自动去重。代码演示如下:


string = "Python真简单啊"
num = 8
A = {1,"2",'34',5.0,6+7j,string,num}#内容可以是变量代表的数据
print(A)
#输出结果为
{1, '2', 5.0, 8, '34', 'Python真简单啊', (6+7j)}
B = {string,num,A}#不可以含有集合A,会报错
print(B)
#报错情况为:
Traceback (most recent call last):
  File "C:\Users\Durova\Desktop\demo.py", line 5, in <module>
    B = {string,num,A}
TypeError: unhashable type: 'set'

集合类型有四种基本的操作,分别为交集(&)、并集(|)、补集(^)、差集(-),如下表:

 

 

 

演示如下:


>>> S = {1,2,3,4,5}
>>> T = {4,5,6,7,8}
>>> S-T
{1, 2, 3}
>>> S|T
{1, 2, 3, 4, 5, 6, 7, 8}
>>> S&T
{4, 5}
>>> S^T
{1, 2, 3, 6, 7, 8}

集合类型有一些常用的操作函数或方法,如下表:

 

这些函数或方法的使用与普通函数或方法一致,前面的教程中已经有演示,这里仅演示较为特殊的set()函数。

set()函数将其他的组合数据变成集合类型,返回结果是一个无重复且排序任意的集合。set()函数也可以生成空集合变量。演示如下:


>>> s = set()
>>> s
set()#表示空集合
>>> s = set("知之为知之不知为不知是知也")
>>> s
{'为', '不', '是', '知', '也', '之'}#这种方法多用于去重,适合于任何组合数据类型。

2、序列类型概述

序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。序列的基本思想和表示方法来源于数学中的数列概念。在数学中,数列S由n个数表示,分别为s1、s2……sn-1、sn.每一个数在数列中都有特定的序号,这些序号提供了辨别他们的索引号。

在Python序列类型中同样如此。当需要访问序列中的某个特定值时,只需要通过下标标出即可。Python中有很多数据类型都是序列类型,其中比较重要的是字符串类型、列表类型和元组类型。

序列类型都使用相同的索引体系,与之前介绍的字符串类型一样,即正向递增序号和反向递减序号。同样需要注意,正向递增序号的第一个元素,其序列号为0。

 

 

序列类型由一些通用的操作符和函数,如下表:

 


序列类型中较为重要的字符串类型已经讲解过了,列表类型将在下节介绍,还有一种非常重要的序列类型是元组类型,我们将用元组类型来演示上述操作符和函数来同时熟悉元组类型和序列类型的操作。演示如下:


>>> t = (1,2,3,4.0,5.0,'6')#创建一个元组
>>> type(t)
<class 'tuple'>#元组类型用tuple表示
>>> 1 in t
True
>>> 4.0 in t
True
>>> 4 in t
True#这里4和4.0是等值的
>>> 4.1 in t
False#元组中不存在4.1
>>> "5.0" not in t
True#字符串“5.0”不在元组中
>>> s = ("7","8")
>>> t + s
(1, 2, 3, 4.0, 5.0, '6', '7', '8')#两个元组相加
>>> s * 2
('7', '8', '7', '8')#将元组s重复两次
>>> t[2]
3
>>> t[1:2]
(2,)#数学上的左闭右开区间
>>> t[0:4:2]
(1, 3)#在[0,4]的区间内,从0开始,步长为2,第二个为3,第三个超出区间,不选
>>> len(t)
6#元素数量,简单易懂
>>> min(t)#元素之间不可比较,报错
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    min(t)
TypeError: unorderable types: str() < int()
>>> max(s)#元素之间可以比较
'8'#返回最大值
>>> t.index(2)
1#元素2的所有,只有一个,如果由重复元素,返回正向递增序列号中较小的那个
>>> t.count(4.0)
1#元素4.0出现的次数

元组类型一旦定义就不能修改,在编程中不够灵活,同时,元组类型的所有操作都可以由列表实现。因此,一般编程中,如果需要自定义变量,通常以列表类型替代元组类型使用。如果确认编程中确认不需要修改数据,可以通过使用元组数据类型来节省资源。

元组类型主要在Python语法相关的场景使用,例如,当函数返回多个值时,实际返回的是一个元组类型。

3、映射类型概述

映射类型是“键-值”数据类型的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。键值对是一种二元关系,源于属性和值的映射关系。

映射类型是序列类型的一种扩展,在序列类型中,采用从0开始的正向递增序号进行具体元素值的索引。而映射类型则用用户来定义的序号,即键,去索引具体的值。

键表示一个属性,也可以理解为一个类别或项目,值是属性和内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。

posted @ 2021-02-20 19:07  酸菜鱼学Python  阅读(2212)  评论(0编辑  收藏  举报