内容正文:
筐鱼梧领凤峡匪跑脚凡辅乒踪勿久褂舟婴袭剪肚爹伦甄啸镣娟附卉态再骂广东农工商职业技术学院PPT模板-精美原创毕业论文答辩广东农工商职业技术学院PPT模板-精美原创毕业论文答辩
项目6 常用数据结构
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目介绍
项目背景
数据结构是计算机存储、组织数据的方式,是相互之间存在一种或多种特定关系的数据元素的集合,是用来存储一组相关数据的。在大数据时代,程序中不仅要处理数字、字符串这些基础类型的数据,还需要处理混合数据。为此,Python定义了可以表示混合数据的组合数据类型。
Python中常见的数据结构可以统称为容器(container),根据组织方式的不同,可以分成:如列表、元组、字符串)、映射(如字典)以及集合(set)。
项目介绍
项目规划
01
熟悉序列的基本概念
02
熟练掌握序列、集合、映射类型的概念、特点和基本操作
03
理解可迭代(Iterable)对象与迭代器(Iterator)的概念
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目目标
知识目标
1
熟悉序列的基本概念
2
掌握序列、集合、映射类型的概念
3
理解可迭代(Iterable)对象与迭代器(Iterator)的概念
项目目标
能力目标
1
熟练掌握序列、集合、映射类型的基本操作
2
熟悉各种类型之间的相互转换方法
3
了解列表推导式、字典推导式、集合推导式、生成器推导式的基本用法
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目准备
1. 序列
Python中的字符串、列表和元组数据类型都是序列。在Python中,所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
项目准备
2. 列表list
列表是Python中最基本的数据类型。列表将由若干数据作为元素的序列放置在一对方括号中,元素之间以逗号分隔。Python列表元素可以由任意类型的数据构成。同一列表中各元素的类型可以各不相同。列表中的元素允许重复。此外,Python列表是可以修改的,修改方式包括:增(向列表添加元素)、删(从列表删除元素)、改(对列表的某个元素进行修改)、查(访问列表中的元素)。
项目准备
3. 元组tuple
元组和列表十分相似,由不同的元素组成,每个元素的数据类型可以各不相同,如字符串、数字和元组等。
元组和列表有两大不同点:一是元组用圆括号括起;二是元组是不可变对象,是不可更改的。元组创建之后就不能修改、添加、删除成员。
元组的不可变特性使其在处理数据时效率较高,而且可以防止出现误修改操作。
由于元组内容无法修改,所以元组的操作主要分为创建和查找两种。
项目准备
4. 列表与元组之间的转换
元组和列表之间可以互相转换。如果需要修改元组内容,可以将元组转换成列表之后进行修改,修改后再转换回元组。
列表转换成元组
元组转换成列表
项目准备
5. 字典
字典是Python中唯一内建的映射类型,用花括号“{}”作为边界,元素之间以逗号分隔,每个元素是一对键(key)和值(value),键和值之间用英文冒号分隔。键不能重复,每一个值都有一个对应的键,语法如下:
{key1: value1, key2: value2, key3: value3, … , keyN: valueN }
字典可通过数据key查找关联数据value。键可以是任何不可修改类型的数据,如数值、字符串和元组等,列表是可变的,不能作为字典的键;而键对应的值可以是任何类型的数据。Python中字典的元素没有特殊的顺序,因此不能像序列那样通过位置索引来查找成员数据,字典的显示次序由字典在内部的存储结构决定。
项目准备
6. 列表、元组与字典之间的转化
列表、元组、字典之间的转换关系
项目准备
7. 集合
集合是一组用“{}”括起来的无序不重复元素,元素之间用逗号分隔。元素可以是各种类型的不可变对象。Python提供了集合类型set,用于表示大量无序元素的集合。集合的操作包括:创建、访问、添加、删除、运算。
项目准备
8. 可迭代(Iterable)对象与迭代器(Iterator)
可迭代(Iterable)对象与迭代器(Iterator)是Python中管理数据的更高级的抽象,了解这两类对象的概念和使用方法,有助于更高效的操作Python的常用数据结构。
可迭代(Iterable)对象
迭代器(Iterator)
项目准备
9. 推导式
推导式(comprehensions),又称解析式。可以把推导式理解为循环语句的变形,所有循环语句能够实现的功能,推导式都可以实现,而且形式更简洁。Python中提供了列表推导式、字典推导式和集合推导式,但并未提供元组推导式。
项目准备
10. 序列解包
序列解包(Sequence Unpacking)是Python语言赋值语句的一种技巧和方法,在Python中经常用到。
多变量同时赋值
一个对象值赋给多个变量
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目实施
任务6.1 将输入升序输出
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表带有很多操作方法,reverse倒序就是其中一个,本次实验通过调用reverse来了解python中的列表。
项目实施
任务6.1 将输入升序输出
建立 “列表元素倒序.py”文件,用于编写Python实验程序。
编写任务代码。
# 定义一个数字列表
numberList = [5, 3, 1, 7, 9, 2, 8, 1, 4, 7, 3]
# 将数字列表倒序排序
numberList.reverse()
# 直接打印数字列表
print(numberList)
项目实施
任务6.1 将输入升序输出
执行程序
①用鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“列表元素倒序”
②在IDE下方控制台查看输出结果
项目实施
任务6.2 去重
Python中包含列表list和集合set等类型,list可以包含重复值,而set不可以包含重复值。利用set的这个特性,我们可以实现对list的去重效果。
项目实施
任务6.2 去重
建立 “去重.py”文件,用于编写Python实验程序。
编写任务代码。
# 创建一个数字列表
numberList = [5, 3, 1, 7, 9, 2, 8, 1, 4, 7, 3]
# 使用set函数将数字列表转换为Set集合实现去重,再通过list函数转换回列表,接着使用
for循环进行遍历输出
for ele in list(set(numberList)):
print(ele)
项目实施
任务6.2 去重
执行程序
①用鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“去重”
②在IDE下方控制台查看输出结果
项目实施
任务6.3 对调KV计算最小值及最大值
Python中包含列表list和集合set等类型,list可以包含重复值,而set不可以包含重复值。利用set的这个特性,我们可以实现对list的去重效果。
项目实施
任务6.3 对调KV计算最小值及最大值
建立 “对调KV计算最小值及最大值.py”文件,用于编写Python实验程序。
编写任务代码。
# 定义一个字典类型数据集
from collections import OrderedDict
if __name__ == '__main__':
prices = {
'ACME': 45.23,
'APPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# 将字典数据集key与value进行反转,计算最大值最小值并打印
print(min(zip(prices.values(), prices.keys())))
print(max(zip(prices.values(), prices.keys())))
项目实施
任务6.3 对调KV计算最小值及最大值
执行程序
①用鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“去重”
②在IDE下方控制台查看输出结果
项目实施
任务6.4 公共键字典列表排序
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,通过key查找value,具有极快的查找速度。但是字典的存储默认是“无序”的,因此某些情况下,需要对字典进行“排序”。
项目实施
任务6.4 公共键字典列表排序
建立 “公共键字典列表排序.py”文件,用于编写Python实验程序。
编写任务代码。
# 引入itemgetter函数
from operator import itemgetter
# 定义一个字典数据集列表,并将列表中数据分别按照shares字段及price字段进行排序
if __name__ == '__main__':
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 143.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
byshares = sorted(portfolio, key=itemgetter('shares'))
byprice = sorted(portfolio, key=itemgetter('price'))
print(byshares)
print(byprice)
项目实施
任务6.4 公共键字典列表排序
执行程序
①用鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“公共键字典列表排序”
②在IDE下方控制台查看输出结果
课后练习与技能训练
一、填空题
练习
1. Python中,通过列表中的 方法可以根据指定值查找第一个匹配的列表元素的位置。
2. Python中,通过列表中的 方法可以将一个元素插入到列表的指定位置。
3. 若在列表的最后添加新元素,则可以直接使用列表的 方法。
4. 使用 语句可以删除某个变量或列表中的某个元素。
5. 使用 方法可以获取一个列表中最大元素的值。
6. 使用 方法可以获取一个列表中最小元素的值。
课后练习与技能训练
一、填空题
练习
7. 使用列表中的 方法可以统计某个值在列表中出现的次数。
8. Python中集合有两种插入元素的方法,分别是 和 。
9. 集合中的 方法可以用于判断一个集合是否是另一个集合的子集。
10. 集合中的 方法可以用于判断一个集合是否是另一个集合的父集。
11. 使用del可以删除某个元素,也可以使用字典中的 方法删除指定键的元素。
课后练习与技能训练
一、填空题
练习
12. 使用字典中的 方法可以一次将一个字典中的所有元素都清除。
13. 判断字典中是否存在某个键可以使用字典中的 方法,也可以使用成员运算符in。
14. 已知ls=[x*2 for x in range(5)],则print(ls)的输出结果为 。
15. 是指可以通过next函数不断获取下一个值的对象。
课后练习与技能训练
二、选择题
练习
1. 下列属于可变类型的是()
Q. 列表
R. 元组
S. 字符串
T. 数字
课后练习与技能训练
二、选择题
练习
2. 下列叙述正确的是()
A. 列表和元组都是用一对中括号括起来的多个元素的有序集合,各元素之间用逗号分隔
B. 列表是用一对中括号括起来的多个元素的有序集合,各元素之间用逗号分隔,元组是用一对小括号括起来的多个元素的有序集合,各元素之间用逗号分隔
C. 列表是用一对小括号括起来的多个元素的有序集合,各元素之间用逗号分隔,元组是用一对中括号括起来的多个元素的有序集合,各元素之间用逗号分隔
D. 列表和元组都是用一对小括号括起来的多个元素的有序集合,各元素之间用逗号分隔
课后练习与技能训练
二、选择题
练习
3. 关于复制列表元素说法错误的是()
A. Python中,通过赋值运算实际上是将两个变量指向同一个对象,而不是将一个变量的值赋给另一个变量。
B. 采用元素截取的方法,可以根据一个已有列表对象复制出另一个新的列表对象,后面对两个对象的操作完全独立
C. 如果一个列表中包含列表类型的元素,元素截取的方法完全可行,两个列表中的相同列表类型的元素完全独立
D. 为了真正实现列表的复制操作,可以使用Python在copy模块中提供的deepcopy函数
课后练习与技能训练
二、选择题
练习
已知学生类中有属性name和sno,列表ls中含有若干学生对象,若要求列表ls按照学生的姓名的降序排序,相应的语句是()
A. ls.sort(key=lambda stu:stu.name,reverse=True)
B. ls.sort(key=lambda stu:stu.name)
C. ls.sort(key=name,reverse=True)
D. ls.sort(name)
课后练习与技能训练
二、选择题
练习
下列叙述错误的是()
可以使用一对大括号{}或set函数创建集合
可以使用一对大括号{}或dict函数创建字典
可以使用{}或set()创建空集合
可以使用{}或dict()创建空字典
课后练习与技能训练
二、选择题
练习
6.已知定义:d=dict(sno='1810100', name='李晓明', age=19,t=(3,4),s=[3,4,5])
则len(d)的值为()
5
6
7
8
课后练习与技能训练
二、选择题
练习
7. 已知字典d,获取字典中键值集合的语句是()
A. d.items()
B. d.values()
C. d.keys()
D. d.get()
课后练习与技能训练
二、选择题
练习
8. 下列有关生成器叙述错误的是()
A. 将列表生成表达式中的一对中括号改为一对小括号即可得到生成器
B. 对于生成器对象,也可以像其他可迭代对象一样使用for循环遍历对象中的每一个元素
C. 如果生成元素的方法比较复杂,不适合用for循环方式实现,我们还可以借助yield关键字利用函数实现生成器的功能
D. 生成器就是一次性在内存中产生大量列表元素,占用大量的内存空间
课后练习与技能训练
二、选择题
练习
关于说法正确的是()
A. 列表是可迭代对象、但不是迭代器;同样,生成器是可迭代对象、但不是迭代器
B. 列表是可迭代对象、但不是迭代器;而生成器既是可迭代对象、又是迭代器
C. 列表既是可迭代对象、又是迭代器;而生成器是可迭代对象、但不是迭代器
D. 列表既是可迭代对象、又是迭代器;而生成器是迭代器、但不是迭代对象
课后练习与技能训练
三、简答题
练习
1.写出下面程序的运行结果。
t1=("zhangsan",18,95.5)
t2=()
t3=(33,)
t4=([44,55,66])
t5=t1+t3
print(t1,t2,t3,t4,t5)
print(t5)
print(max(t4))
print(min(t4))
课后练习与技能训练
三、简答题
练习
2.写出下面程序的运行结果。
ls=[1,2,3,2,3,4]
print(ls.index(4))
print(ls.count(3))
print(max(ls))
print(min(ls))
print(len(ls))
del ls[3]
print(ls)
ls.sort(reverse=True)
print(ls)
课后练习与技能训练
三、简答题
练习
3.写出下面程序的运行结果。
import copy
s1=[4,5,6]
s2=s1
s2[1]="nk"
print(s1,s2)
s3=s1[1:3]
s3[1]="cn"
print(s1,s3)
s4=copy.deepcopy(s1)
s4[1]=333
print(s1,s4)
s5=[4,[5,6]]
s6=s5[1:3]
s5[1][0]="cn"
print(s5,s6)
s7=copy.deepcopy(s5)
s7[1]="nk"
print(s5,s7)
课后练习与技能训练
三、简答题
练习
4.写出下面程序的运行结果。
s1={1,2,3}
s2=set([2,3,3,4])
s1.add(3)
s2.update('ab')
s3=s1.intersection(s2)
s4=s1.union(s2)
s5=s1.difference(s2)
s6=s1.symmetric_difference(s2)
print(s1)
print(s2)
print(s3)
print(s4)
print(s5)
print(s6)
课后练习与技能训练
三、简答题
练习
5.写出下面程序的运行结果。
d1={'name':"zhangsan",'sno':"001",'score':99}
d2=dict().fromkeys(['radius','height'],0)
print(d1)
print(d2)
d1.update({'age':19})
d2.update(radius=10)
print(d1)
print(d2)
del d1['age']
height=d2.pop('height','not found')
print(d1)
print(d2)
print(height)
print(len(d1))
print(len(d2))
课后练习与技能训练
三、简答题
练习
6.写出下面程序的运行结果。
s1=[1,2,3,4,5,6,7,8,9,10]
s2=list(range(10,20))
s3=s1[2:8:2]
s4=s2[-8::-2]
print(s1)
print(s2)
print(s3)
print(s4)
课后练习与技能训练
三、简答题
练习
7.该程序用到字典的浅拷贝和深拷贝,已知程序运行结果,请将程序填写完整。
已知程序运行结果为:
{'name': 'li', 'sno': '001', 'score': {'math': 99, 'C++': 90}}
{'name': 'zhangsan', 'sno': '001', 'score': {'math': 99, 'C++': 90}}
{'name': 'zhangsan', 'sno': '001', 'score': {'math': 99, 'C++': 88}}
mport copy
d1={'name':"zhangsan",'sno':"001",'score':{'math':99,'C++':88}}
d2=
d3=
d1['name']="li"
d1['score']['C++']=90
print(d1)
print(d2)
print(d3)
$$