天天看点

Python程序设计 | 复合数据类型

作者:醒不来的胡博士

学习目标:

  • 掌握四种复合数据类型的定义
  • 掌握四种复合数据类型的使用流程
  • 掌握类型转换和格式化输出的方法
  • 掌握元组和列表的区别
  • 熟悉复合数据类型在实际项目中的使用技巧
  • 了解四种复合数据类型的使用区别

思维导图

Python程序设计 | 复合数据类型

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] #方法1:直接指定

>>>list=[]#方法2:先创建一个空列表,然后通过for循环实现

for n in range(1,11):

list.append(n);

>>>list(range(1,11)) #方法3:列表解析

[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 列表函数和方法

Python程序设计 | 复合数据类型
Python程序设计 | 复合数据类型

4.2 tuple(元组)

4.2.1 元组的创建

创建元组:

变量名 = (元素1,元素2,…,元素n)

注意:

当元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。

4.2.2 基本操作

1. 访问

使用下标索引来访问相应的元素值。也可采用正向索引和反向索引两种方式,并支持切片操作。

2. 修改

元组中的元素值是不允许修改的,可以对元组进行连接生成新的元组。

3. 删除

元素值不允许删除的,但可使用del语句删除整个元组。

需要注意的是,删除后的元组对象不可再次引用。

4. 统计

通过内置的count方法统计某个元素出现的次数。

5. 查找

通过内置的index方法查找某个元素首次出现的索引位置。

4.2.3 元组函数和方法

Python程序设计 | 复合数据类型
Python程序设计 | 复合数据类型

表中的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}} #字典的value值是字典

>>>Va2 = {a:[1,2,3],b:[4,5,6]} #字典的value值是序列

>>>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 字典函数和方法

Python程序设计 | 复合数据类型
Python程序设计 | 复合数据类型

4.4 set(集合)

4.4.1 集合的创建

创建集合对象:

变量名 = {元素1,元素2,…,元素n}

集合特性:

  • 无序性:元素之间没有确定的顺序。
  • 互异性:不会出现重复的元素。
  • 确定性:元素和集合只有属于或不属于的关系。

注意:

创建空集合用set();

{}创建一个空字典。

4.4.2 集合的数学运算

数学运算后依然保持集合的特性,没有重复的元素

Python程序设计 | 复合数据类型

4.4.3 基本操作

1. 更改

  • add():添加一个元素
  • update():同时添加多个元素。

2. 删除

  • discard() 和 remove() 方法删除集合中特定的元素。
  • 若删除的对象不存在,remove()方法会引起错误,discard()方法不会。

4.4.4 不可变集合

Python程序设计 | 复合数据类型

4.4.5 集合函数和方法

Python程序设计 | 复合数据类型

4.5 类型转换和格式化输出

4.5.1 类型转换

不可变数据类型:

内存中不管有多少个引用,相同的对象只占用一块内存;当改变变量值时,必须创建新的对象。

可变数据类型:

对一个变量进行操作时,其值可变;且值的变化并不会引起新建对象的操作,即地址是不会变的,仅内容变化或地址扩充。

通过id()函数获得变量的地址,验证数据类型是否可变

Python程序设计 | 复合数据类型

4.5.2 格式化输出

“%”进行格式化输出

Python程序设计 | 复合数据类型
Python程序设计 | 复合数据类型

使用format()函数进行格式化输出

基本用法:

(1)不带编号,即“{}”;

(2)带数字编号,可调换顺序,即“{1}”、“{2}”;

(3)带关键字,即“{a}”、“{tom}”。

特殊用法:

(1)< (默认)左对齐、> 右对齐、^ 中间对齐、= (只用于数字)在小数点后进行补齐;

(2)取位数“{:4s}”、"{:.2f}"等。

4.6 总结

  1. 介绍四种复合数据类型的定义及使用流程
  2. 介绍类型转换和格式化输出的方法
  3. 介绍复合数据类型在实际项目中的使用技巧

    与区别

4.7 每日一分享

天不生无用之人,地不长无用之草。

黄河尚有澄清日,岂可人无得运时。

雪压寒梅头不低,卧薪尝胆待佳期。

终有一日同风起,扶摇直上九万里。