在之前我们学会了数字类型,包括整数类型、浮点类型和复数类型,这些类型仅能表示一个数据,这种表示单一数据的类型称为基本数据类型。然而,实际计算中却存在大量同时处理多个数据的情况,这种需要将多个数据有效组织起来并统一表示,这种能够表示多个数据的类型称为组合数据类型。
一、组合数据类型概述
组合数据类型更能够将多个同类或不同类型组织起来,通过单一的表示使数据更有序、更容易。根据数据之间的关系,组合数据类型可以分为3类:序列类型、集合类型和映射类型。
序列类型是一个元素向量,元素之间的存在先后关系,通过序号访问,元素之间不排他。
集合类型是一个元素类型,元素之间无序,相同元素在集合中唯一存在。
映射类型是“键-值”数据项的组合,每个元素是一个键值对,表示为(key, value)。
1.序列类型
序列类型是一堆元素向量,元素之间存在先后关系,通过序号访问。
Python中有很多数据类型都是序列类型,其中比较重要的是str(字符串)、tuple(元组)list(列表)可以看成是单一字符的有序序列,属于序列类型。
序列类型有12个通用的操作符和函数
操 作 符 | 描 述 |
x in s | 如果x是是的元素,返回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(,i[,j])) | 序列s中从i开始到j位置中第一次出现的元素x的位置 |
s.count(x) | 序列中出现x的总次数 |
元组(tuple)是序列类型中比较特殊的类型,因为它一旦创建就不能被修改。Python中元组采用逗号和圆括号(可选)来表示,如:
>>>creature = "cat", "dog", "tiger", "bear" print(creature) >>>('cat', 'dog', 'tiger', 'bear')>>>creature = "cat", "dog", "tiger", "bear" all=(1,2,456,creature) #元组中包含元组creature print(all) print(all[2]) print(all[-1][2])>>>(1, 2, 456, ('cat', 'dog', 'tiger', 'bear'))>>>456>>>tiger
其中,一个元组可以作为另一个元组的元素,可以采用多级索引获取信息,例如上面的元组all中包含了元组creature,可以用all[-1][2]获取对应元素值。
元组除了用于表达固定数据外,还常用于以下3种情况:函数多返回值、多变量同步赋值、循环遍历,例如:
>>>def func(x): #函数多返回值 return x,x*x; >>>a,b = 'dog','cat' #多变量同步赋值>>>import math #循环遍历 for x,y in ((1,0),(2,5),(3,8)): print(math.hypot(x,y)) #求多个坐标值到原点的距离
2.集合类型
集合类型与数学中集合的概念一致,即包含0个或多个数据项的无序组合。
集合中的元素不可重复,元素类型只能是固定数据类型,例如集合、浮点数、字符串、元组等,列表、字典、和集合类型本身都是可变数据类型,不能作为集合的元素出现。
由于集合是无序组合,它没有索引和位置的概念,不能分片,集合中元素可以动态增加和删除。集合用大括号({})表示,可以用赋值语句生成一个集合,例如:
>>>S={100,200,(666,25),"YES",458} print(S) >>>{100, 200, 458, 'YES', (666, 25)}
从上面可以看出,由于集合的元素是无序的,集合的打印效果与定义顺序可以不一致。
集合类型有10个操作符
操 作 符 | 描 述 |
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 或 S.intersection_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.update(T) | 如果S和T相同或S是T的子集,返回True,否则返回False,可以用S>T判断S是否是T的真子集 |
S>=T 或 S.issuperset(T) | 如果S和T相同或S是T的超集,返回True,否则返回False,可以用S>T判断S是否是T的真超集 |
集合类型与其他类型最大的不同在于它不包含重复元素,因此,当需要对一维数据进行去重或进行数据重复处理时,一般通过集合来完成。
3.映射类型
映射类型是“键-值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。
键(key)表示一个属性,也可以理解为一个类别或项目,值(value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。
在Python中,映射类型主要以字典(dict)体现。
二、列表类型和操作
列表是包含0个或多个对象引用的有序序列,没有长度限制,可自由增删元素,使用灵活。
1.列表类型的概念
列表(list)是包含0个或多个对象引用的有序序列,属于序列类型。与元组不同,列表的长度和内容都是可变的,可自由对列表中的数据项进行增加、删除或替换
2.列表类型的操作
函数或方法 | 描述 |
ls[i] = x | 替换类表 ls 第 i 数据项为 x |
ls[i:j] =l t | 用列表 lt 替换列表 ls 中第 i 到第 j 项数据(不含第 j 项) |
ls[i:j:k] = lt | 用列表 lt 替换列表 ls 中第 i 到第j项以k为步数的数据(不含第j项) |
del ls[i:j] | 删除列表 ls 第i到第 j 项数据,等价于ls[i:j]=[] |
del ls[i:j:k] | 删除列表 ls 第 i 到第 j 项以 k 为步数的数据 |
ls += lt 或 ls.extend(lt) | 将列表 lt 元素增加到列表 ls 中 |
ls *= n | 更新列表 ls,其元素重复 n 次 |
ls.append(x) | 在列表 s 最后增加一个元素 x |
ls.clear() | 删除 ls 中的所有元素 |
ls.copy() | 生成一个新列表,复制 ls 中的所有元素 |
ls.insert(i,x) | 在列表 ls 的第 i 位置增加元素 x |
ls.pop(i) | 将列表 ls 中的第 i 项元素取出并删除该元素 |
ls.remove(x) | 将列表中出现的第一个元素 x 删除 |
ls.reserve(x) | 列表 ls 中的元素反转 |
三、字典类型和操作
列表是存储和检索数据的有序序列。当访问列表中的元素时,可以通过整数的索引来查找它,这个索引时元素在列表中的符号,列表的索引模式是“<整数序号>查找<被索引内容>”
1.字典类型的概念
通过任意键信息查找一组数据中值信息的过程叫做映射,Python语言中通过字典实现映射。Python语言中的字典可以通过大括号({})建立,建立模式如下:
{<键1>:<值1>, <键2>:<值2>, ... ,<键n>:<值n>}
其中,键和值通过冒号连接,不同键值对通过逗号隔开。
例如:
>>>Dic={"中国":"北京","美国":"华盛顿","法国":"巴黎"} print(Dic) print(Dic["中国"]) >>>{'中国': '北京', '美国': '华盛顿', '法国': '巴黎'} >>>中国
一般来说,字典中键值对的访问模式如下,采用中括号格式:
<值> = <字典变量> [<键>]
2.字典类型的操作
与列表类似Python字典也有非常灵活的操作方法。使用大括号可以创建字典,并指定初始值,通过中括号可以增加新的元素,例如:
>>>Dic={"中国":"北京","美国":"华盛顿","法国":"巴黎"} Dic{"英国"}="伦敦" print(Dic) >>>{"中国":"北京","美国":"华盛顿","法国":"巴黎","英国":"伦敦"}
注意:直接使用大括号({})生成一个空的字典。生成空集合需要使用函数set()。
字典类型的函数和方法:
函数和方法 | 描 述 |
<d>.keys() | 返回所有的键信息 |
<d>.values() | 返回所有的值信息 |
<d>.items() | 返回所有的键值对 |
<d>.get(<key>,<default>) | 键存在则返回相应值,否则返回默认值 |
<d>.pop(<key>,<default>) | 键存在则返回返回值,同时删除键值对,否则返回默认值 |
<d>.popitem() | 随机从字典中取出一个键值对,以元组(key,value)形式返回 |
<d>.clear() | 删除所有的键值对 |
del<d>[<key>] | 删除字典中某一个键值对 |
<key>in<d> | 如果键在字典中返回True,否则返回False |
与其他组合类型一样,字典可以通过for-in语句对其元素进行遍历,例如:
>>>Dic={"中国":"北京","美国":"华盛顿","法国":"巴黎"} for i in Dic: print(i) >>>中国 美国 法国
所以,字典有以下一些基本原则:
(1)字典是一个键值对的集合,该集合以键为索引,一个键信息只对应一个值信息。
(2)字典中元素以键信息为索引访问。
(3)字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。