内容正文:
第3单元 认识数据
3.2 数据与结构
授课教师
1
一、数据类型
【做中悟】活动1 了解订单数据,填表3.2.1
网站名称 订单中的数据 Python中对应的数据类型
某电商网站 商品名称 字符串
单价 浮点型
数量 整型
某学生学籍网 姓名 字符串
出生日期 日期型
是否团员 布尔型(逻辑型)
数据类型
简单数据类型:不能分解成更小的数据类型
例如:整数,浮点数,字符串,布尔等
复合数据类型:简单数据类型或复合数据类型组成
例如:列表,字典,元组,集合等
bool(逻辑型)
True(真)和False(假)
list
dict
tuple
set
int
float
str
字符串
3
浮点型
2
布尔
4
整型
1
int,不包含小数点的整数就是整型,例:5,6,7
float,包含小数的数据类型时浮点型,例:3.14,5.2
str,包含除数字以外的其他符号,例:¥%……&*
bool,逻辑型,只表示真或者假
简单数据类型
元组
3
字典
2
集合
4
列表
1
复合数据类型
可变的,元素是有序的。
OrderList=[1,2,3,4,5]
可变的,由索引(key)和它对应的值value组成。
OrderDict={ ‘a’:1,‘b’:2,‘c’:3}
不可变的,元素是有序的。
OrderTuple=(1,2,3,4,5)
可变的,元素是唯一的,无序的。
Set1={2,3,1,5,7} Set2={2,3,4,6}
① 列表
订单汇总,也可以按订单产生的先后顺序组成一个列表(列表里的项是有顺序编号的):
>>> BookList=[BookInfo0, BookInfo1]
>>> type(BookList)
<class 'list'> #返回列表类型
>>> BookList[0]
('ID0010230', 15.68, 36)
>>> BookList[1]
('ID2315937', 20, 2)
>>> BookList[0][1]*BookList[0][2]+BookList[1][1]*BookList[1][2]
604.48 #返回计算结果
② 字典
>>> tinydict = {'a': 1, 'b': 2, 'b': '3'}
>>> tinydict['b']
'3'
>>> tinydict
{'a': 1, 'b': '3'}
③ 元组
某用户预订的商品编号为ID0010230、单价为15.68元,数量为36,可将这3个不同类型的简单数据组织成“元组”复合数据类型:
>>> BookInfo0=('ID0010230',15.68,36)
>>> type(BookInfo0)
<class 'tuple'> #返回元组类型
另一用户预订的商品编号为ID2315937、单价为20元,数量为2,可记作:
>>> BookInfo1=('ID2315937',20,2)
>>> BookInfo1[1]
20 #返回元组BookInfo1中索引为1的项的值
④ 集合
订单汇总,可以定义为一个集合(集合里的项称为元素,彼此之间没有顺序):
>>> BookSet={BookInfo0,BookInfo1}
>>> type(BookSet)
<class 'set'> #返回集合类型
>>> BookSet
{('ID2315937', 20, 2), ('ID0010230', 15.68, 36)} #返回集合的值
>>> BookInfo0 in BookSet #测试元素BookInfo0是否属于集合BookSet
True #返回逻辑真(属于)
数据结构:存在特定关系的数据元素的组合体
线性结构:
数据结构按逻辑结构分类:
集合结构、线性结构、树结构、图结构
二、数据结构
1、队列(Queue)是一种操作有限制的线性结构,它的数据元素只能在一端(队尾)依次添加(入队),在另一端(队首)依次删除(出队)。
队列是先进先出(FIFO:First In First Out)表。
排队候车
a0 ,a1 ,a2 ,… ,an
出队
入队
队首
队尾
典型的例子如超市里排队付款的队伍。
二、数据结构
在Python中,队列一般用列表(list)实现,常用操作:
q=[] #定义空列表q
q.append(x) #元素x入队
q.pop(0) #返回队首元素,队首元素出队(删除)
len(q) #返回队列q的长度(元素个数)
q[i] #返回列表q中索引(index)为i的元素. 索引有2套编号方 式:正编号(从左到右编号依次为0,1,2,…)和负编号(从 右到左编号依次为-1,-2,-3,…)
队列的计算机实现:
二、数据结构
二、数据结构
【做中悟】活动2 编制订单数据处理程序 P65-66
1
3
4
5
6
2
7
进队顺序
1
2
3
4
5
6
7
此处进队
此处出队
出队顺序
1
2
3
4
5
6
7
小练习
活动1:了解快递配送线路
请同学们结合课本P67,小组讨论完成下图
派送点
学校收发室
某单位传达室
职工小李
职工小王
收件人A同学
观察一下:这些线路的形状像什么?
任务二:探究快递配送过程
收件人B同学
2、树结构是一种具有层次关系的非线性结构。由n(n>=0)个节点组成的有限集合。
(1)仅有一个称为根的节点;
(2)当n>0时,其余节点可分为m(m>0)个互不相交的集合,其中每个集合又是一棵树,并称为根的子树。
典型的例子如快递到达目的地城市后,物流图的结构。
二、数据结构
活动2:了解物流网络
结合课本P69,将下图补充完整
岳阳市
扬州市
南通市
长沙市
南京市
泰州市
任务二:探究快递配送过程
思考:这又是什么结构呢?
3、图结构是由一组节点(称为顶点)和一组节点间的连线(称为边或弧)构成的一种数据结构。图结构中数据元素之间是多对多的关系。
二、数据结构
活动3 规划取快递最快路线
某同学网购的书已经到达家附近的快递门店,需要他自己去取。不巧的是,这次购买的三本书是三个不同的物流公司派送的,他家与各快递门店的位置如右图所示
地点——地点 时间/分
家——快递门店A 2
家——快递门店B 5
家——快递门店C 10
快递门店A——快递门店B 4
快递门店A——快递门店C 6
快递门店B——快递门店C 4
该同学估算了在这些地点之间步行需要的时间,
详见表3.2.2.
快递门店B
快递门店A
快递门店C
家
活动3 规划取快递最快路线
请你帮他规划最省时的路线,然后设计算法解决问题并在下框中描述你的算法。
从起点出发,把当前可以到达的下一个位置列举出来,再从列举出的新位置出发,继续列举下一步可以到达。
地点——地点 时间/分
家——快递门店A 2
家——快递门店B 5
家——快递门店C 10
快递门店A——快递门店B 4
快递门店A——快递门店C 6
快递门店B——快递门店C 4
家
快递门店C
快递门店A
快递门店B
Python 中的复合数据类型
我们发现分析过程的图形是树结构,树中的节点表示当前所在的位置,边表示选择的线路。利用树结构,我们能够更清晰地实现不重复、不遗漏地列举所有做法,更利千通过比较得到最优解。
分析队列、树、图三种结构的区别
结构类型 数据(节点)之间的关系 生活中相应结构应用举例
队列
(线性) 一对一 排队
树 一对多 行政区划、书本目录结构
图 多对多 全国航运图、铁路运输、电话网络、互联网等
$$