(共54张PPT)
第3章
课时9 基本数据结构
信息技术
课标梳理·微知著
教材重点 课标要求 学业质量水平
基本数据结构 掌握字符串、列表、字典等基本数据结构的使用方法 2-2
教材研析·固基础
1.程序计算时,需要根据数据之间的逻辑关系和处理任务的要求,将各种数据组合成具有一定结构的复合体。如下某数据库的“课程”数据表中的一条记录就是一个复合体。
2.常用数据结构:字符串、列表、字典。
1
字符串String
1.概念:字符串是0个或多个字符组成的序列。
2.要点:
(1)字符串是不可变数据:即无法修改字符串的部分内容,必须修改全部的内容。
(2)字符串是Python中最常用的数据类型。可以使用引号('或″或 )来创建字符串。
(3)创建字符串很简单,只要为变量分配一个字符串型的值即可。如:
var2=″China 2023!″
(4)Python不支持单字符类型,单字符在Python中也是作为一个字符串使用。
3.求字符串的字符个数
函数 描述 范例
len(seq) 返回序列的长度 len('Runoob')=6
4.访问字符串中的值:通过索引(“切片”)。
(1)索引:标识每个字符在字符串中的位置。
①正索引(左 右):0起始
②负索引(左 右):-1起始
(2)“切片”:使用方括号 []和索引实现从字符串中取子串。
①格式字符串“切片”的语法格式:字符串变量名[头索引:尾索引:步长]
范例:取str中的“N”的表达式为str[2]
·范例1:“切片”取字符串'Runoob'中的'u'和'un'
>>>s='Runoob'
>>>s[1:2:1]
'u'
>>>s[1:3]
'un'
·范例2:“切片”取字符串'Runoob'中的'uob'
>>>s='Runoob'
>>>s[1::2]
'uob'
·范例1:逆向“切片”取字符串'Runoob'中的'n'和'nu'
>>>s='Runoob'
>>>s[-4:-5:-1]
'n'
>>>s[-4:-6:-1]
'nu'
·范例2:逆向“切片”取字符串'Runoob'中的子串'bn'
>>>s='Runoob'
>>>s[-1:-4:-3]
'b'
>>>s[-1:-5:-3]
'bn'
典例1 变量a指向字符串对象'Python',从该字符串中取'Pn',表达式为______________________。
a[0:6:5]或a[:6:5]或a[::5]
典例2 变量a指向字符串对象'Python',正向取该字符串中的全部字符,表达式为___________或_________或________或______或_____。
a[0:6:1]
a[:6:1]
a[::1]
a[::]
a[:]
典例3 变量a指向字符串对象'Python',逆向取该字符串中的全部字符,正确的表达式为_____________或___________或______________________。
a[-1:-7:-1]
a[:-7:-1]
a[::-1](答案不唯一)
5.Python 字符串更新
可以截取字符串的一部分并与其他字符串拼接。运行实例如下:
典例4 字符串变量s=″Hello world″,如果想将字符串变量s中的字符″w″改成大写″W″,下列操作可行的是( )
A.s=s[0:6]+″W″+s[7::]
B.s[6]=″W″
C.s[7]=″W″
D.s=s[1:7]+″W″+s[8::]
解析 我们可以访问字符串中的单个字符,但却不可以对其进行修改,因此选项B,C是错误的,字符串的正索引是从0开始进行编号的,所以答案选A。
A
典例5 有Python代码如下:
a='ABCD'
a[1]='W'
print(a)
则运行代码后,结果为________________。
程序将出错
解析 代码:a[1]='W'无法执行,因为字符串不能修改部分内容,必须修改其全部内容。
2
列表List
1.定义:列表是最常用的Python数据类型。它是一个由0个或多个元素组成的1个序列整体,序列中的每个值都有对应的位置值,称之为索引,第一个索引是0,第二个索引是1,依此类推。
2.要点:
(1)列表是可变数据。
(2)列表的数据项(元素)不需要具有相同的类型→异质。
(3)列表的元素可以是数字、字符串等混合类型的数据,甚至可以是其他的列表(如下图所示)。
3.创建列表:把逗号“,”分隔的不同的数据项使用方括号“[]”括起来即可。如下所示:
list1=['Google','Runoob',2023,2024]
list2=[1,2,3,4,5 ]
list3=[″a″,″b″,″c″,″d″]
list4=['red','green','blue','yellow','white','black']
范例:list1[1]表示列表list1中第2个元素('Runoob')。
4.Python内建函数
(1)确定序列的长度:len(列表名)
(2)确定最大元素:max(列表名)
(3)确定最小元素:min(列表名)
(4)求数值型列表的和:sum(列表名)
(5)求列表中某个元素出现的次数:列表名.count(统计的元素)
(6)将字符串转换为列表:list(字符串)
范例
>>> list2=[1,2,3,4,5 ]
>>> max(list2)
5
>>> min(list2)
1
>>> len(list2)
5
>>> sum(list2)
15
>>>a=['中国','浙江','杭州','浙江']
>>>a.count('浙江')
>>>2
>>>s='我爱我的祖国!'
>>>list(s)
['我','爱','我','的','祖','国','!']
5.索引(访问列表中的元素):与字符串相似。通过索引列表可以进行截取、组合。
(1)正向:从左侧头部开始,左侧第1个元素索引为0。
(2)反向:从右侧尾部开始,右侧第1个元素索引为-1,往左为-2、-3、-4、…。
6.切片:取列表中的一段值
(1)正向切片(步长为正)
①格式:列表名[头索引:尾索引:步长]
②要点
·头索引省略,表示从最前面索引为0的项开始切片。
·尾索引省略,表示向右取完。
·步长表示取值时相邻2项的跨度,省略时默认为1。
典例6 下图所示名为nums列表的第3、4、5、6、7个值正向切片,运行结果为[30,40,50,60,70],则切片表达式为____________________。
nums
10 20 30 40 50 60 70 80 90
some_nums
30 40 50 60 70
nums[2:7](答案不唯一)
解析 观察图片可知切片元素的索引为2~6,根据“前闭后开”规则,所以切片表达式中头索引为2,尾索引为6的后一个元素索引7。
典例7 取列表nums的第3、5、7个值正向切片,运行结果为[30,50,70],则切片表达式为______________________。
nums
10 20 30 40 50 60 70 80 90
nums[2:7:2](答案不唯一)
解析 要取的值跨度为2,所以步长为2;切片头索引和尾索引的确定同上典例6。
典例8 取列表nums的第7个值往前到第1值的正向切片,运行结果为[10,20,30,40,50,60,70],则切片表达式为____________________________________________。
nums[0:7:1](或nums[:7:1] 或 nums[:7:] 或 nums[:7])
解析 第1个值的索引为0 头索引为0(可以省略);第7个值的索引为6,“前闭后开” 尾索引为7;相邻2元素跨度为1 步长为1(可以省略)。
(2)逆向切片(步长为负)
①格式:列表名[头索引:尾索引:步长]
②要点
·头索引省略,表示从最右面索引为-1的项开始切片。
·尾索引省略,表示向左取完。
典例9 取列表values的第5、4、3个值逆向切片,运行结果为['white','yellow', 'blue'],则切片表达式为____________________________。
values[-2:-5:-1](答案不唯一)
解析 values[-2:-5:-1]这个答案使用的是负索引的逆向切片,第5个值的反向索引是-2 头索引为-2;第3个值的反向索引是-4,根据“前闭后开”规则,尾索引为其左侧元素索引-5;逆向切片向量2元素跨度为1 步长为-1。 values[-2:-5:-1]。values[4:1:-1]这个答案使用的索引是正索引的逆向切片。
典例10 取values列表的第5 3个值跨度2逆向切片,运行结果为['white', 'blue'],则切片表达式为__________________________。
values[-2:-5:-2](答案不唯一)
解析 相邻2元素的跨度为2 步长为-2。
典例11 取values列表的第5 1个值跨度1逆向切片,运行结果为['white', 'yellow','blue','green','red'],则切片表达式为________________________。
values[-2:-7:-1](答案不唯一)
解析 向左取完,所以尾索引为-7或者省略(使用正向索引的逆向切片时,头索引为4,尾索引省略)。
典例12 取values列表的第6 3个值跨度1逆向切片,运行结果为['black', 'white','yellow','blue'],则切片表达式为____________________________。
values[-1:-5:-1](答案不唯一)
解析 向右取完,所以头索引为-1或者省略(使用正索引的逆向切片时,头索引为最右侧元素正索引值5,根据“前闭后开”规则,尾索引为第3个元素的左侧元素索引值1)。
典例13 取values列表所有值的逆向切片,运行结果为['black','white','yellow', 'blue','green','red'],则切片表达式为________________________________。
values[-1:-7:-1](答案不唯一)
解析 使用负索引时,头索引为-1或者省略。尾索引为最左侧元素索引值-6的下一个索引值-7,或者省略。相邻2元素跨度为1,逆向切片,步长为-1。
7.更新列表
(1)对列表的数据项进行修改。格式:列表名[元素索引值]=元素值。
典例14 有如下Python程序段:
list1=['Google','Runoob',1997,2000]
list1[2]=2023
print(list1)
执行后,输出的结果为____________________________。
['Google','Runoob',2023,2000]
解析 list1[2]=2023是将列表中索引为2的元素(第3个元素)替换为2023,所以print函数输出列表时,原来第3个元素的值从1997变为2023。
(2)添加列表项。使用append()方法往列表尾部添加一个新元素。格式:列表名.append(元素值)。
典例15 有如下Python程序段:
list1=['G','R','T']
list1.append('B')
print(list1)
执行后,输出的结果为______________。
['G','R','T','B']
解析 list1.append('B')是在原列表的最后添加一个新的元素'B'。
(3)插入列表元素。格式:列表名[插入位置索引:插入位置索引]=元素值。
往当前列表的某个位置插入列表或字符串时,被插入列表的每项、字串的每个字符都会作为list1的一个元素,而不会整体插入。
(4)列表拼接。使用脚本操作符“+”,在现有列表尾部拼接另一个列表对象,格式:列表名=列表名+拼接列表对象(或者“拼接列表名”)。
典例16 若list1=[1,2,3],list2=[4,5],则list1+list2的结果是______________。
[1,2,3,4,5]
解析 符号“+”的作用是将list2拼接于list1尾部。
典例17 火柴棍游戏。用火柴棍拼成数字0~9,具体拼法如图所示:
编写Python程序实现:运行程序时,输入任意两位正整数,输出所需火柴棍的数量。
完善下列代码:
num=int(input(″请输入一个两位正整数:″))
match=″6255456376″
a=num%10
b=①________
count=②_______________________
print(″共需火柴棍:″,count)
结合代码,输入一个两位正整数,输出所需火柴棍数量最多,则输入的两位正整数为③____。
num//10
int(match[a])+int(match[b])
88
解析 本题考查运算符及列表的综合应用。a、b分别表示所输正整数个位和十位的数字,故b=num//10;列表元素的访问,第1个元素的索引号为0,对应数字0所需火柴棍的数量,所以该两位正整数对应火柴棍的总数量为int(match[a])+int(match[b]);从match=“6255456376”可知数字8使用火柴棍的数量最多,确定答案为88。
(5)重复列表。使用脚本操作符“*”重复列表。格式:列表名*重复的遍数。
典例18 写出下列Python语句的输出结果:
print(['a','b'] 3)
①________________________
print([1,2,3] 3)
②________________________
['a','b','a','b','a','b']
[1,2,3,1,2,3,1,2,3]
解析 脚本操作符“ ”用于重复列表,所以['a','b'] 3是将列表['a','b']重复了3遍;[1,2,3] 3是将列表[1,2,3]重复了3遍。
(6)嵌套列表。在主列表里嵌套其他子列表。格式为:主列表名=[子列表1,[子列表2,子列表3,……],……]
★取子列表中某个元素。格式为:主列表名[主列表中子列表相应的索引值][所取元素在子列表中的索引值]
典例19 结合上图,写出下列Python语句的输出结果:
print(x[1])
①_____________
print(x[1][2])
②_______
[1,2,3]
3
解析 语句x=[a,n]是将列表a和列表n嵌套在了列表x中,列表a作为x的第1个元素(索引为0),列表n是x的第2个元素(索引为1),print(x[1])是要输出列表x中索引值为1的元素,即列表n;print(x[1][2])是要输出列表x中索引值为1的元素(列表n)中索引值为2的元素(第3个),即列表n[1,2,3]中的第3个元素3。
(7)检查成员。使用成员运算符“in”/“not in”检查对象是/不是列表成员。
典例20 有如下Python程序段:
a=['a','b','c']
n=[1,2,3]
a=a+n
print(2 in a,'b' not in n)执行后,输出的结果为___________。
True True
解析 语句a=a+n用于将列表n中的元素拼接在列表a的后面,a列表为['a','b', 'c',1,2,3],所以2是a的成员,表达式“2 in a”的值为True;'b'不是列表n [1,2,3]中的成员,所以表达式“'b' not in n”的值为True。
3
字典Dictionary
1.定义:字典是由0个或多个元素组成的序列。每个元素是一个键值对,每个键值对的键和值之间用冒号“:”分隔,相邻两个键值对之间用逗号“,”分隔,整个字典包括在大括号 {} 中。
2.创建字典
字典名={键1:值1,键2:值2,…,键n:值n}
范例:inf={'姓名':'杨成器','性别':'男','单位':'国家电网','Tel':17706730306}
3.特点
(1)字典是可变数据。
(2)键和值是一一对应的。
(3)一个字典中,键必须是唯一的,但值则不必 同一个值可以对应多个键,但不允许同一个键出现多次,若创建时同一个键被赋值多次,则记录其最后1个值。
(4)值可以取任何数据类型,但键必须是不可变的,如字符串,数字等,而不能用列表等可变对象。
4.访问字典里的值:字典名[与访问值相应的键名]。
典例21 有如下Python程序段:
inf={'姓名':'杨成器','性别':'男','单位':'国家电网','年龄':25}
print(inf['单位'],inf['年龄'])
执行后,输出的结果为______________。
国家电网 25
解析 inf['单位']是访问名为“inf”的字典中键为“单位”的值 “国家电网”(print函数输出结果时,字符串不带引号)。inf['年龄']同理。
典例22 有如下Python程序段:
color={'R':210,'G':120,'B':80,'R':245}
print(color['R'])
执行后,输出的结果为_____。
245
解析 字典中,键必须是唯一的,不允许同一个键出现多次,若创建字典时同一个键被赋值多次,则记录其最后1个值。字典color中,键“R”出现了2次,记录它第2次的值245。
5.修改某个键的值
格式:字典名[要修改的键名]=新值
典例23 有如下Python程序段:
color={'G':120,'B':80,'R':245}
color['R']=198
print(color['R'])
执行后,输出的结果为_____。
198
解析 语句“color['R']=198”将键“R”的值修改为198。
6.添加元素
格式:字典名[新键]=新值
典例24 有如下Python程序段:
book={'书名':'射雕英雄传','作者':'金庸','类别':'武侠'}
________________
print(book)
执行后,输出的结果为:{'书名': '射雕英雄传','作者': '金庸','类别': '武侠','售价': 92}。则划线处代码应为_______________。
book['售价']=92
解析 输出结果中的字典比原来的字典在最后多了1个新元素,添加元素的格式为:字典名[新键]=新值,所以在print函数输出结果前,语句“book['售价']=92”添加了键为“售价”、值为92的新元素。
7.常用内置函数
(1)len(字典名):计算字典元素个数,即键的总数。
典例25 有如下Python程序段:
book={'书名':'射雕英雄传','作者':'金庸','类别':'武侠','售价':92}
print(len(book))
执行后,输出的结果为______。
(2)str(字典名):将字典作为字符串输出
4
解析 “len(book)”用于统计字典“book”的元素个数,book字典有4个用逗号分隔的元素。
典例26 字典dic中“键”存储的是小组成员姓名,“值”是各成员对应的年龄,具体如下:
dic={'Michael':32,'Sarah':26,'Tracy':35,'Bob':36,'Jack':18}
现在请你根据题意,写出下面相应的Python程序代码。
①输出姓名为'Sarah'的年龄
________________________________。
②修改姓名为'Jack'的年龄,将其更正为19
________________________________。
③添加成员:年龄为17的Tom
________________________________。
print(dic['Sarah'])
dic['Jack']=19
dic['Tom']=17
解析 本题考核对字典的访问,字典通过“键”来完成访问,而“键”是唯一的。直接访问“键”'Sarah',输出其对应的年龄:print(dic['Sarah'])。可以通过字典的“键”给字典添加元素,如果字典里已存在该“键”的值,则会覆盖,如果不存在,则会添加新元素。因为存在“键”'Jack',所以可以直接更改'Jack'的年龄。由于不存在“键”'Tom',所以添加新元素'Tom',同时赋予相应“值”17。