Logo

郎哥编程

列表数据结构

2020-03-28 173

前面我们认识了基础数据,掌握了整型、浮点型、布尔型、字符串类型这些基础数据类型。

但要解决现实问题,仅有基础数据类型是不够的,难以反映出现实数据的特点,因此需要提供一类结构化数据以满足数据处理要求。

01.png

从问题中认识结构化数据

阿萌准备编写一个统计全班数学考试成绩的程序,并求出该班数学成绩的平均分。对于这个问题,阿萌要用什么数据类型来存储该班所有同学的数学成绩呢?

02.png

按照阿萌的思路,他的程序是这样子的:

03.png

阿萌在编写程序时偷了个赖,他只编写了求5名同学数学成绩的程序代码。因为按照他的编程思路,他需要在程序中创建50个变量来存储学生的数学成绩,编写上百条重复的语句,这显然是不妥的。因此阿萌需要调整思路重新编写这个程序。

阿萌编程思路的主要问题在于对每个同学的数学成绩存储处理上,他使用单个浮点类型的变量来存储学生的成绩,这样就会造成无法使用循环结构来进行成绩输入和求成绩累加和这样的重复操作。

认识列表结构

04.png


在日常生活中有大量的数据类似于上面的问题,它们有相同的类型,需要的处理方法也一致,为了实现对这些数据统一表达和处理。

Python语言提供了列表数据结构,英文名称是list。列表可以把不同类型的数据进行有序排列,并同一存储和操作。列表结构如下图所示;

05.png

列表是有序数据的集合,其结构的最大特征就是通过有序编号固定集合内每个数据的位置。有序编号被称为索引,被固定的每个数据被称为元素。列表内所包含元素的数据类型没有限制,可以是任意类型的数据,如数字类型、字符串、布尔型、结构化数据(如列表)。

索引是一个从0开始的连续正整数。上图的0、1、2、length-2、length-1为列表元素的索引,其中length是列表包含元素的个数,length-2为列表倒数第二个元素,length-1为列表最后一个元素。


06.png

在程序中创建一个列表并添加元素到列表非常简单。列表结构用“[]”表示,列表的元素放置在“[]”内,元素之间用英文逗号分隔。

07.png

列表元素可以是任何类型的数据,可以是前面学过的基础数据类型,也可以是结构化数据和对象数据。结构化数据就是类似列表这样的数据,后面要学的元组和字典都是结构化数据,对象数据在本课程中没有涉及,在后面的课程中会学习。

08.png

案例02代码创建了存储不同数据类型的列表。student列表存储了5个字符串类型的元素,sealdata列表存储了6个浮点类型的元素,objdata列表存储了3个不同数据类型的元素,score列表存储了4个元素,其中第2个和第3个元素是列表数据。

09.png

访问列表指定的元素,可以使用访问运算符”[]”和“[:]”来访问列表元素。

”[]”访问列表的单个元素,”[]”返回被访问的元素。

“[:]”可以访问列表的多个元素,“[:]”只能访问列表中的连续元素,这些连续元素被放置在一个列表中,这个列表称为子列表,“[:]”会返回这个子列表。

10.png

案例03的代码分别使用访问运算符”[]”和“[:]”访问student列表的元素,使用”[]”访问运算符返回的是列表的元素,使用“[:]”访问运算符返回的是一个子列表,该子列表包含索引范围内的列表元素。

11.png

当列表需要动态添加元素时,可以调用列表的append方法添加一个新的元素到列表的尾部。append方法是列表结构提供的一个方法,可以把方法看作一个归属列表的函数,该函数只有列表类型的变量才能调用。

12.png

调用append方法之前,必须要创建一个列表变量,再用列表变量调用append方法添加元素到列表。

13.png

案例04的代码首先创建了一个空列表,空列表就是在列表中没有任何元素,也就是说一个元素都没有,然后用创建的列表变量调用append方法添加元素到列表。

append方法不仅可以添加基本数据类型的元素到列表,也可以添加结构化数据或对象到列表。

14.png

案例05的代码首先创建了一个空列表,然后用创建的列表变量分别调用append方法添加了两个列表元素,一个列表元素在方法的参数中直接创建,一个列表元素是已创建的列表。

15.png

当需要修改列表某一个元素的内容时,可以使用访问列表元素的方法。在赋值运算符“=”左边使用访问运算符可以修改单个元素或多个元素内容。

16.png

案例06的代码创建了sealdata列表,并添加了6个元素。

语句:sealdata[1] = 96.3

用于修改sealdata列表的第2个元素。

语句:sealdata[2:3] = [39.1,56.6]

用于修改sealdata列表的第3、4个元素,当需要对多个元素修改时,赋值运算符的右侧应使用列表。

17.png

当需要删除列表的某一个元素时,可以使用del语句来删除列表的某一个元素,或者删除整个列表。

18.png

使用del语句删除列表元素时,在del关键字后面使用空格隔开待删除的列表元素。

19.png

使用del语句删除整个列表时,在del关键字后面使用空格隔开待删除的列表变量。

20.png

案例07的代码演示了如何删除列表指定的元素和整个列表。

21.png

当需要删除指定内容的列表元素时,可以使用列表的remove方法来删除指定内容的列表元素。

22.png

上图中list为列表类型的变量名称,remove为列表方法,参数obj为指定的内容,该内容需要与待删除列表元素的内容及数据类型相同。

23.png

案例08的代码演示了如何删除指定内容的列表元素。

24.png

访问列表的所有元素,也称为遍历列表。遍历列表是从列表的第一个元素开始,顺序访问列表的所有元素,全部列表元素访问完成后,称为一次遍历。

可以使用for循环来遍历列表,使用for循环遍历列表的语法如下:

25.png

上图中obj是列表元素,list是列表变量,for循环次数由list的元素个数决定。在第一轮循环时,obj是list的第一个元素,第二轮循环时,obj是list的第二个元素,……,以此类推。list的所有元素遍历完成后,obj不再是列表中的元素,因此循环结束。

26.png

案例09的代码演示了如何遍历一个列表。obj也可以用其它名称代替,index是列表的一个方法,可以获取当前列表元素的索引。

27.png


使用成员运算符“in”和“not in”可以判断一个指定的内容是否在列表中。

28.png


案例10的代码演示了如何使用成员运算符来判断指定的内容是否在列表中。

29.png

可以使用len函数来获取列表的元素个数,len函数使用语法如下:

30.png

调用len函数后,len函数会返回列表的元素个数。

使用列表结构解决上面的问题

阿萌掌握了列表结构,他改变了原来的编程思路,他准备使用列表来存储全部学生的数学成绩,并使用for循环录入学生的数学成绩,最后计算数学成绩的平均分。

31.png

阿萌依据新的思路绘制了程序流程图。阿萌绘制了三个流程图:一个流程图是主流程图,表示程序的主要流程;一个流程图是输入成绩流程图,表示输入成绩的流程;一个流程图是计算平均分流程图,表示计算平均分的流程。

当程序的流程过于复杂时,可以把流程图分解为多个流程图,其中包括一个主流程图,其它流程图为子流程图。

32.png

33.png

34.png

有了流程图,阿萌开始编写代码。他启动Python IDLE,在IDLE的Shell窗口新建一个代码文件,在新建的代码编辑窗口编写代码。

35.png

代码解读

在上面的代码中,首先创建一个空列表achievement_list,用于存储学生成绩,并创建变量count,用于存储学生人数,为了程序测试方便,count赋值为5。

使用for循环输入学生成绩,循环次数为学生人数加1。在每轮循环中,要求用户输入学生的成绩,列表调用append方法将输入的学生成绩添加到列表。

遍历achievement_list,计算学生成绩的累加和,并存储到sum变量。

使用sum变量除以列表的长度即可得学生成绩的平均分,列表长度通过len函数获取。

36.png


课程小结

在Python语言中,创建一个列表并赋值非常简单。列表元素用方括号[]括起来,元素之间用英文逗号分隔。

访问列表元素可以使用“[]”和“[:]”访问运算符,用于访问列表中的单个数据项,或者一个子列表。

如果要动态添加列表元素,可以使用列表的append方法。

删除指定位置或范围的列表元素可以使用del语句,del语句也可以删除整个列表。如需要删除匹配元素内容的数据项,可以使用列表的remove方法。

遍历列表可以使用for循环结构。


上机练习

1、编写程序,创建一个空列表,列表名称为names,动态添加 张三、李四、王五、赵二元素。

2、编写程序,创建一个score列表,列表元素为89.3、78、96.1、88、92,遍历列表并求列表元素的累加和。

3、编写程序,创建一个num列表,列表元素为30,12,89,31,69,95,完成如下操作:

(1)使用print函数输出列表索引3~5的元素;

(2)修改索引2的元素内容为69.5;

(3)使用remove方法删除内容为31的元素。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论