数据类型(下)Note-Python-4

708 阅读9分钟

数据类型的相关知识,内容包括列表和元组、字典、集合、可变类型和不可变类型、简单复杂的数据结构、输入和输出、上机练习。

一、容器类型:列表和元组

1. 数据收纳盒

用来收纳数据对象的数据类型,以一种规则的下标索引方式(收纳盒名字+数字序号)访问到每个数据,这种收纳盒是一种序列。

列表可以删除、添加、替换、重排序列中的元素(可变类型)。元组是不能再更新(不可变)序列,元组在保留列表大多数功能的同时,去掉了一些灵活性以换取更高的处理性能。

2. 列表和元组的创建

创建列表

方括号法[],指明类型法list()

创建元组

圆括号法(),指明类型法tuple()

列表或元组中保存的各个数据称作元素(element),类型没有限制

3. 列表的操作:增长/缩减

增长列表

append操作/insert操作/extend操作

缩减列表

pop操作/remove操作/clear操作

列表是一种可变容器,可以随意增减,但并不是所有的数据容器都能像列表这样可以继续添加新元素

4. 列表的操作:重新组织

reverse / sort 操作

reverse:把列表中的数据元素头尾反转重新排列
sort:把列表中的数据元素按照大小顺序重新排列

reversed / sorted 操作得到重新排列的列表,而不影响原来的列表

5. 列表的方法

6. 列表和元组的操作:合并和查询个数

合并

加法运算+:连接两个列表/元组
乘法运算*:复制n次,生成新列表/元组

列表/元组大小

len():列表/元组中元素的个数

7. 列表和元组的操作:索引和切片

索引

alist[n]或atuple[n]
// 可以用赋值语句给列表中的任何一个位置重新赋值
// 但元组属于不可变类型,索引只能获取对应位置中的数据值,不可重新赋值

切片

alist[start : end : step]
atuple[start : end : step]

8. 列表和元组的操作:查找和计算

查找

in操作:判断某个元素是否存在于列表/元组中
index操作:指定的数据在列表/元组的哪个位置
count操作:指定的数据在列表/元组中出现过几次

计算

sum函数:将列表中所有的数据元素累加
min/max函数:返回列表中最小/最大的数据元素

二、容器类型:字典

1. 贴标签的数据

“标签收纳盒”

给数据贴上标签,就可以通过具有特定含义的名字或者别的记号来获取数据。

现实生活中的字典

通过标签(或者关键字)来索引数据,区别于列表或元组通过连续的整数来索引

标签(key)和数据值(value)

字典容器中保存着一系列的key-value对
l 通过键值key来索引元素value

2. 创建一个字典

花括号法和指明类型法

student = {}
student = dict()

数据项(item)

字典中保存的各个标签-数据值(key-value)
标签和数据值之间用冒号“:”连接

批量添加数据项

student = dict.fromkeys((“name”, “age”))

字典是可变类型,可以添加、删除、替换元素

字典中的元素value没有顺序,可以是任意类型,甚至也可以是字典

字典的键值key可以是任意不可变类型(数值/字符串/元组),例如:用元组来作为坐标,索引元素

3. 更新一个字典

合并字典

update方法

增长字典

“关联”操作
update操作:以key=value的形式批量添加数据项

缩减字典

del操作:删除指定标签的数据项
pop操作:删除指定标签的数据项并返回数据值
popitem操作:删除并返回任意一个数据项
clear操作:清空字典

字典大小

len函数

4. 访问字典的数据项

标签索引

dict[key]
// 获取字典中指定标签的数据值,或更新指定标签的数据项

get操作

获取字典的标签、数据值和数据项

keys函数:返回字典中的所有标签;
values函数:返回字典中的所有数据值;
items函数:将每个数据项表示为二元元组,返回所有的数据项。

5. 在字典中查找

in操作

判断字典中是否存在某个标签

in操作和values函数的组合

判断字典中是否存在某个数据值

三、容器类型:集合

1. 标签的容器

“标签袋”

通过改造字典类型,去掉关联数据值,只留下标签的新容器类型

集合是不重复元素的无序组合

2. 创建一个集合

创建集合:{}或者set()

set()创建空集
可用set()从其它序列转换生成集合

集合会自动忽略重复的数据

集合中不能加入可变类型数据

3. 更新一个集合

增长集合

add:添加一个数据
update:批量添加数据

缩减集合

remove/discard:删除指定数据
pop:删除任意数据并返回值
clear:清空集合

集合大小

len函数

4. 访问集合中的元素

in

判断元素是否属于集合

pop

删除数据元素的同时,返回它的值
取遍所有数据元素之后,集合成为一个空集
可以用copy操作先给集合制作一个“替身”

迭代循环

for a in aset:

5. 集合运算

生成新集合运算

关系判定

<=,=,>:子集/真子集/超集/真超集

交集

isdisjoint():两集合交集是否为空

6. 什么时候用集合?

快速去除重复的数据项

154, 233, 432, 154, 236, 213, 342, 
432, 236, 332, 321, 243, 319, 326, 
324, 321, 163, 183, 235,…

判断元素是否在一组数据中,如果这些数据的次序不重要,使用集合可以获得比列表更好的性能

如,325是否在上述的一组数据中?

四、可变类型和不可变类型

1. 数据收纳的灵活性

列表——可以接长、拆短的积木式收纳盒

元组——固定长短的收纳盒

2. 数据类型

不可变(immutable)类型:一旦创建就无法修改数据值的数据类型

整数、浮点数、复数、字符串、逻辑值、元组

可变(mutable)类型:可以随时改变的数据类型

列表、字典、集合

灵活性强会花费一些计算或者存储的代价去维持这些强大的功能

3. 可变类型的变量引用

变量的引用特性:可变类型的变量操作需要注意,多个变量通过赋值引用同一个可变类型对象时,通过其中任何一个变量改变了可变类型对象,其它变量也随之改变

五、简单复杂的数据结构

1. 比较几种数据结构

  • 使用方括号[]创建列表
  • 使用圆括号()创建元组
  • 使用花括号{}创建字典

每种类型中,都可以通过方括号[]对单个元素进行访问

  • 对于列表和元组,方括号里是整型的偏移量
  • 对于字典,方括号里的是键,都返回元素的值

2. 建立大型数据结构

将这些内置的数据结构自由地组合成更大、更复杂的结构

创建自定义数据结构的过程中,唯一的限制来自于这些内置数据类型本身

3. 建立大型数据结构:列表/元组

建立3个不同的列表

alist = [1,2,3]
blist = [‘Hello’,‘Python’]
clist = [True,False]

嵌套列表/元组

list_of_lists = [[1,2,3], 
[‘Hello’,‘Python’], [True,False]]
tuple_of_lists = ([1,2,3], 
[‘Hello’,‘Python’], [True,False])

4. 建立大型数据结构:字典

嵌套字典

dict_of_lists = {‘num’:[1,2,3], 
  ‘word’:[‘Hello’,‘Python’], 
  ‘bool’:[True,False]}

字典的元素可以是任意类型,甚至也可以是字典

字典的键值可以是任意不可变类型,例如:用元组来作为坐标,索引元素

poi={(100,100):'bus stop'}

六、输入和输出

1. 来料加工:input函数

用户会给程序提供什么值是无法预测的,因此在编写程序的时候,不知道变量的具体值,解释器最终要怎么知道变量的值呢?

input(prompt)

显示提示信息prompt,由用户输入内容

input()返回值是字符串

通过int()函数将字符串类型强制转换为整数类型

2. 产品展示:print函数

打印各变量的值输出

print([object,...][,sep=‘ ‘][,end=‘\n’]
[,file=sys.stdout])

sep:表示变量之间用什么字符串隔开,缺省是空格

end:表示以这个字符串结尾,缺省为换行

file:指定了文本将要发送到的文件、标准流或其它类似的 文件的对象;默认是sys.stdout

3. 格式化字符串

print函数默认把对象打印到stdout流,并且添加了一些自动的格式化(可以自定义分隔符和行末符)

格式化字符串

'%d %s' % (v1, v2)

七、上机练习:容器类型操作

1. 列表、元组基本操作

+, *, len(), [], in

2. 列表、元组高级操作

mylist=[1,2,3,4,5]
切片:获得[2,3,4],获得[3,4,5],获得[3,2,1], 获得[1,3,5]
mytpl=(1,2,3,4,5)同上操作
t='Mike and Tom'
split拆分、join合成为'Mike/and/Tom'

3. 集合基本操作

a=set([1,2,3,4,5])
b=set([2,4,6,8,10])
并、交、差、异或、子集
添加、删除、是否空集

4. 字典基本操作

mydict={1:'Mon', 'line1':3332}
添加、删除、是否空字典
取字典所有的key/value
判断key是否存在

「资料来源:©Python语言基础与应用-中国大学MOOC」