学习目标:
- 掌握四种复合数据类型的定义
- 掌握四种复合数据类型的使用流程
- 掌握类型转换和格式化输出的方法
- 掌握元组和列表的区别
- 熟悉复合数据类型在实际项目中的使用技巧
- 了解四种复合数据类型的使用区别
思维导图
4.1 List(列表)
4.1.1 列表的创建
创建列表: 变量名 = [元素1,元素2,…,元素n]
list类型中区分元素的顺序,且允许包含重复的元素。
4.1.2 基本操作
1. 索引 列表每一个元素都对应一个整数型的索引值,可以通过索引值来得到相应的元素值。同时支持列表元素的正向索引和反向索引。
正向索引即索引值为正,从0开始;
反向索引即索引值为负,从-1开始。若是反向索引,则-1为末尾元素对应的索引编号。
2. 切片 切片操作可以截取列表变量中的部分元素,并返回一个子列表变量。
切片操作中,生成子列表的元素包含起始索引对应的元素,但是不包含终止索引对应的元素。 3. 加法和乘法
- 加法操作使用加号(+)完成,表示把加号两端的列表变量连接形成一个新列表;
- 乘法操作使用星号(*)完成,表示对当前列表对象进行复制并连接,并形成一个新列表。
4. 修改和删除
- 通过索引值对相应元素进行修改或删除。
- 删除整个列表或列表中的部分元素,使用del命令。删除整个列表后,不可再次引用。
5. 追加插入和扩展
- append:在当前列表对象尾部追加元素;
- insert:在当前列表的指定索引位置插入元素;
- extend:对当前列表元素进行批量增加。
4.1.3 多维列表
创建三个列表类型的变量a、n和x。其中,变量a和n中元素都是基本类型,变量x中的元素都是列表类型。
>>> a = ['a',1]
>>> n = ['b',2]
>>> x = [a,n]
>>> x
[['a',1],['b',2]]
>>> x[0]
['a', 1]
>>> x[0][1]
1
直接输入列表的数据,系统会根据输入生成相应的列表维度。
>>>l = [[1,2,3],[4,5,6]]
>>>print(l)
输出结果:
[
[1,2,3],
[4,5,6]
]
也可以使用列表解析方式生成了二维矩阵
cols = 7
rows = 9
list_2d = [[col + 1 for col in range(cols)] for row in range(rows)]
print(list_2d)
4.1.4 迭代器
首先创建了一个列表类型变量lst,然后创建了该列表的迭代器对象lstiter,并且通过该迭代器对象的__next__()方法遍历列表中的元素。 __next__() 方法,返回下一个值。iter方法访问列表。
4.1.5 列表解析
>>>list=[1,2,3,4,5,6,7,8,9,10]
>>>list=[]
for n in range(1,11):
list.append(n);
>>>list(range(1,11))
[1,2,3,4,5,6,7,8,9,10]
for循环在这里可以很好的生成list 首先针对数值运算,使用列表解析生成了1到10的平方值; 其次,针对字符运算,使用列表解析生成了指定范围的字母组合列表。
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
4.1.6 列表函数和方法
4.2 tuple(元组)
4.2.1 元组的创建
创建元组: 变量名 = (元素1,元素2,…,元素n)
注意: 当元组中只包含一个 元素时,需要在元素后面添加逗号 ,否则括号会被当作运算符使用。
4.2.2 基本操作
1. 访问 使用下标索引来访问相应的元素值。也可采用正向索引和反向索引两种方式,并支持切片操作。 2. 修改 元组中的元素值是不允许修改的,可以对元组进行连接生成新的元组。 3. 删除 元素值不允许删除的,但可使用del语句删除整个元组。 需要注意的是,删除后的元组对象不可再次引用。 4. 统计 通过内置的count方法统计某个元素出现的次数。 5. 查找 通过内置的index方法查找某个元素首次出现的索引位置。
4.2.3 元组函数和方法
表中的count方法和index方法,实际是元组类型和列表类型所共有的方法,其使用方法和列表完全相同。
4.2.4 元组的优势
- 可以使函数返回多个值
- 可以使程序运行性能提升
- 一般来说,创建元组类型tuple的变量比列表类型list要快,而且占用更小的存储空间。
- 使用元组是线程安全的
- 元组类型变量的元素不可更改性,可保证多线程读写时的安全问题。
4.3 dict(字典)
4.3.1 字典的创建
创建字典对象: 变量名=(key1:value1, key2:value2,…, keyn:valuen)
- 字典的元素是可变的,可以是列表、元组、字典等任意数据类型,但键(key)值必须使用不可变类型。
- 在同一个字典变量中,键(key) 值必须是唯一的。
4.3.2 基本操作
1. 访问 字典是无序的,没有索引,不能通过下标索引。通过对key值的索引进行访问。 2. 修改 通过对key值的引用对value值的修改操作。 3. 删除 字典的删除操作中,可以删除某个元素或删除整个字典,也可以清空字典元素。.
4.3.3 字典的嵌套
>>>Va1 = {a:{b:1,c:2},d:{e:3,f:4}}
>>>Va2 = {a:[1,2,3],b:[4,5,6]}
>>>n1={'surname':'wang','name':'gang'}
>>>n2={'surname':'zhang','name':'san'}
>>>n3={'surname':'liu','name':'wen'}
>>>n4=[n1,n2,n3]
n1、n2、n3是字典类型的变量,n4是列表类型变量,且n4中的元素即为n1、n2、n3。
4.3.4 字典的遍历
username={'full_name':'ZhangWei', 'surname':'Zhang', 'name':'Wei' }
for k,v in username.items():
print('key:'+k)
print('value:'+v+'\n')
for k in username.keys():
print(k)
print('key:'+k+'-value:'+username[k])
for v in username.values():
print(v)
4.3.5 字典函数和方法
4.4 set(集合)
4.4.1 集合的创建
创建集合对象: 变量名 = {元素1,元素2,…,元素n}
集合特性:
- 无序性:元素之间没有确定的顺序。
- 互异性:不会出现重复的元素。
- 确定性:元素和集合只有属于或不属于的关系。
注意: 创建空集合用set(); {}创建一个空字典。
4.4.2 集合的数学运算
数学运算后依然保持集合的特性,没有重复的元素
4.4.3 基本操作
1. 更改
- add():添加一个元素
- update():同时添加多个元素。
2. 删除
- discard() 和 remove() 方法删除集合中特定的元素。
- 若删除的对象不存在,remove()方法会引起错误,discard()方法不会。
4.4.4 不可变集合
4.4.5 集合函数和方法
4.5 类型转换和格式化输出
4.5.1 类型转换
不可变数据类型: 内存中不管有多少个引用,相同的对象只占用一块内存;当改变变量值时,必须创建新的对象。
可变数据类型: 对一个变量进行操作时,其值可变;且值的变化并不会引起新建对象的操作,即地址是不会变的,仅内容变化或地址扩充。
通过id()函数获得变量的地址,验证数据类型是否可变
4.5.2 格式化输出
“%”进行格式化输出 使用format()函数进行格式化输出 基本用法: (1)不带编号,即“{}”; (2)带数字编号,可调换顺序,即“{1}”、“{2}”; (3)带关键字,即“{a}”、“{tom}”。 特殊用法: (1)< (默认)左对齐、> 右对齐、^ 中间对齐、= (只用于数字)在小数点后进行补齐; (2)取位数“{:4s}”、"{:.2f}"等。
4.6 总结
- 介绍四种复合数据类型的定义及使用流程
- 介绍类型转换和格式化输出的方法
- 介绍复合数据类型在实际项目中的使用技巧
与区别
4.7 每日一分享
天不生无用之人,地不长无用之草。 黄河尚有澄清日,岂可人无得运时。 雪压寒梅头不低,卧薪尝胆待佳期。 终有一日同风起,扶摇直上九万里。
|