当前课程知识点:Python 交互式程序设计导论 >  第4周 >  A 课程视频(列表) >  列表

返回《Python 交互式程序设计导论》慕课在线视频课程列表

列表在线视频

列表

下一节:键盘输入

返回《Python 交互式程序设计导论》慕课在线视频列表

列表课程教案、知识点、字幕

各位同学大家好,欢迎回到Python交互式程序设计课程中

今天我将和大家讨论Python中非常重要的数据类型:列表

关于列表这个概念呢,同学们可以回顾一下初中数学学过的数组的概念

两者之间有很多相似的地方,但是列表的功能要远远强于数组的功能

下面,我们开始今天的内容

我们首先来看一个问题

在程序设计中如果存放一个同学的成绩

我们可以通过设定一个变量来完成

比如说,在这里我们定义一个整数类型的变量叫score成绩

那么存放的成绩呢是90分

如果存放全班100位同学的成绩呢,大家思考下这个问题

那么最直观的办法呢是定义100个变量

score1到score100,分别存放这100个同学的成绩

但是,这显然不是一个好办法

它有两个很重要的问题无法解决

第一,是不易使用,什么意思?

不能通过循环,这种结构来显示所有同学的成绩

因为它是独立的变量,score1、score100变量之间没有任何关系

那么第二点呢是不易扩充

如果有新来的同学,新增的同学

那么这个时候,我们只能定义新的变量来存放新同学的成绩

显然我们程序规模不断扩大,这种情况可能很难控制

所以这种办法虽然我们很直观的能想到,但是不是一个好办法

列表,就为我们解决这类问题提供了一个非常有效的途径

好,我们来看一下列表的概念

列表呢,是一个可以存放任意类型值的可变序列

这里面有几个要素大家注意下

首先,可以存放任意类型的值,在这里,可以存放任意类型的值

第二,可变的序列,可变的,也就意味着它的长度是可以增加的

那么第二条,列表中的元素可以通过元素的位置索引

就是我们经常说的下标,大家想象一下我们在初中数学中学过的数组的概念下标

可以访问,那么位置索引从0开始,这点请大家注意

我们计算机程序设计中很多的序列的索引就是从0开始,列表也是这样

第三条,当列表长度为0时,我们称之为空列表,就是这个列表当中没有任何元素

第四条,与字符串不同,列表可以通过[]操作来修改元素

还记得我们在讲字符串的时候,我专门强调过

字符串是不可以通过[]这种操作来修改元素的

可以通过[]这种操作来访问元素

这是与字符串一个非常大的区别

那么对于列表来讲,我们实际上有两部分内容需要给大家详细介绍

一部分是列表的基本操作,还有一部分是列表的常用方法

今天,我们只关注列表的基本操作

因为列表是一个非常常用的数据类型

所以它的操作同学们应该熟练掌握,好,我们来看一下有哪些

首先我们来看一下列表的创建

在这里我定义了两个列表,一个叫lst1,一个叫lst2

那么lst1呢创建一个空列表使用lst这个关键词加圆括号

这会创建一个空列表,列表的名字叫lst1,里面是没有任何元素的

那么第二种创建方法呢,是在创建列表的同时已经给它添加了5个元素

分别是1、2、3、4、5,那么这个时候

列表的长度是5,它里面有5个元素

这个理解起来应该不困难

下面呢,我们看看如何访问列表中的元素,如何修改列表中的元素

我们来看一下,如果我想访问lst2这个列表中的第一个元素

注意,我在前面的课件中提过

它的第一个元素对应的位置索引是0

所以呢,我们在这用lst中括号0来访问lst2当中的第一个元素1

我们用print语句把它输出

那我们修改一下lst2当中的元素

lst2中括号1,注意这是1,是第几个元素呢,实际上是第二个元素

等于10,这个时候实际上我们是把这里的2修改为10了

所以输出lst2的时候大家看到的结果就是1、10、3、4、5

那么最基本的访问和修改这两个操作讲完之后呢

我们接着介绍列表的遍历和遍历修改

这个遍历和遍历修改呢会用到我们前面讲过的循环结构,讲过的循环结构

我们来看一下,我们怎么样把一个列表中的元素用一个循环结构把它显示或者输出呢

大家看一下,一个非常简单的语句,我给大家详细解释下

for表示循环,e是一个元素的变量

那么这个变量呢,会枚举或穷举lst2当中所有的元素

所以我是这样写的,for这个变量在lst2中

换句话说,就是在lst2中的所有变量用e代表

然后逐一访问,用'print(e)'把它输出

再说一遍,在lst2中,in是在什么什么里面的意思

在lst2中的所有元素我用e代表,每一个元素都访问一遍,叫遍历一遍

那么用print语句把它输出

注意,这有冒号,前面呢有四个空格的缩进

所以输出的结果是1、10、3、4、5

我们看一下上一张幻灯片,这个时候呢lst2经过修改以后是1、10、3、4、5

所以呢你输出以后是1、10、3、4、5

这个呢是我们对于列表的遍历

这个也不复杂,同学们可能觉得稍微困难点的呢是这个for结构

下面呢是列表遍历修改

所谓列表的遍历修改,我们必须把列表的元素一个一个拿出来

修改完,然后重新复制,是这样一个思路

我们来看一下,依然呢我们用到了for这样一个循环结构

我们来看,for i 注意,这个i呢,已经不是循环遍历它的元素了

而是元素的位置索引,就是我们俗称的下标

我们来看一下,那么这是一个下标的变量in,在一个range,range是一个范围的意思

那么range呢,后面有一个参数,这个参数我取的是lst2的len,还记得len函数么?

表示lst2的长度,大家看一下,这个lst2是1、10、3、4、5,五个元素

所以这个里面呢,应该返回是5,对吧?

那么range 5实际上是取了一个区间,默认的是0到5,不包括5,那就是是0到4

所以呢这个语句的意思是i从这个range当中,这个范围区间当中

取从左取到它的终止位置,那就是0到4

所以呢,我们看下面这句话

那就相当于,lst2第一次执行的时候,这是0,这是0

那么就是取第一个元素乘以2加一倍,然后呢又赋给了它本身所以会更新它

那么第二次循环进来呢,i的值呢就变成1,取的是10了,那这面就是一个lst这是1了

那这是10乘以2变成20又赋给了第二个元素,什么时候截止呢?到4的时候截止

因为range这个函数取的是不包括右边界的这样一个区间

那么同学们如果觉得这个语句不好理解呢,我建议大家一个是复习已下循环语句

另外一个是查阅一下range这个函数,它的使用说明

那么通过这样一个语句循环遍历修改以后呢,我们的lst2呢所有元素都翻了一倍

都乘以2,变成2、20、6、8、10变成这样

好,下面我们来看列表的稍微复杂一点的操作

首先看的是列表的加和乘的操作

我又定义了一个列表叫lst3,这个列表呢它有三个元素-1、-2、-3

然后我们用lst2,lst2是多少

同学们可能不记得了,我在这里列出来了2、20、6、8、10

加上lst3,注意两个列表相加,可不是把里面的数相加

而仅仅是把这里面的元素顺序排列而已

我们来看一下,这两个列表相加以后得到的是2、20、6、8、10这是lst2的元素

然后后面紧接的是-1、-2、-3这是lst3的元素,大家注意下

这个时候的加已经不是我们算术中的求和运算了

那么乘法呢也是一样,我们来看下

lst3乘以2大家看,结果是-1、-2、-3、-1、-2、-3

实际上是把lst3当中的元素重复了一遍,变成了原来长度的两倍

原来是三个元素乘以2变成了6,长度为6

所以这个乘呢也不是我们算术符当中的乘法了,在列表当中它有特殊的含义

下面一个操作呢是切片操作,这个切片操作同学们听上去应该很耳熟

什么时候我们讲过呢,在讲字符串的时候,我们讲过这个切片操作

而这个列表的切片操作跟这个字符串的切片操作几乎是类似的,我们来看一下

lst2的值我依然列在这里,2、20、6、8、10

好,我们来看一下,切片第一个参数是1,截止位置是3

那就是从1取到3,包括3么,显然是不包括的,好,看看结果是多少?26

我们来看一下,1是哪个元素呢?是20

因为记得这个位置是0,这个位置是1,这个位置是2,这个位置是3

所以1到3不包括3,那就是20和6

同样的道理,第一个参数省略,默认是0,那就是从0取到3不包括3

从0,那就是这个位置,2、20、6不包括3

因为这是0、1、2、3不包括3不包括8,所以是2、20、6

那么第三个呢?1冒号,第二个参数省略,那就意味着取到结尾

第一个位置是哪呢?这个位置是0,这个位置是1

从20取到最后,那就是20、6、8、10

那么有一个有意思的操作呢就是切片操作我们可以修改它或者说赋值,重新赋值

我们来看一下,lst2的1冒号3,那就是从第一个,从1开始取到3不包括3有几个元素呢?

其实我们在这已经看到了,是这两个元素,20和6,就是这两个位置,这两个位置

现在我把它重新赋为0、0了,实际上就相当于把20和6这两个位置用0代替了

这个时候我们把lst2输出,结果是2、0、0、8、10

那么,今天呢我们主要讲的是List的一些基本的操作

关List的使用呢,内容非常丰富,所以我们后面还有一节课专门来讲List的更高级一点的应用

在这里呢同学们一定要注意两个问题

第一个问题是,在一个列表中,实际上我们可以存储任意类型的数据

不仅仅局限于同类型的,这跟咱们初等数学中学的数组是有区别的

比如说同学们看下面这个例子,lst等于0、3.14、OK、ab、True

大家看看是多少种类型啊?有整数类型,字符串类型,字符串类型,这本身又是一个列表类型

这是一个布尔类型,所以一个列表当中可以存放任何类型的数据,这在语法上是合法的

那么第二点,好的编程习惯是一个列表当中只存储同类型的数据

不要这样混存,因为不同类型的数据存在一个列表当中

对你的访问,对你的程序编写来讲,实际上是人为的制造了不必要的麻烦

那么下面呢,我们会在Pycharm的环境当中给大家做一些示例和演示

打开Pycharm,我首先呢,定义了一个列表,名字叫lst l s t

那么这个列表呢跟我课件上讲的那个列表呢略有不同

我把这个3.14从字符串改成了实型,实数类型,就是浮点类型

那么在这呢我想给大家展示一下,一个列表它可以存放不同类型的数据

但是这样呢不是一个很好的实践,好,我们首先来看一下

如果一个列表中存放了不同类型的数据,实际上对我的访问来讲

并没有太大的影响,它依然可以正常访问,好,我们来看一下

这下面先注释一下,我们先来运行一下

大家看,它可以把列表当中的元素逐一显示

0,整数类型,显示了没有问题,3.14,浮点类型,也没有问题

这个OK呢,是一个字符串类型,ab本身这个元素又是一个列表类型

然后是布尔类型,都没有问题

那么这个呢是我们课件上已经讲过的,用了一个循环结构

这表示,在lst这个列表当中的所有元素遍历一遍

for是一个循环遍历的意思,然后把它输出,没有问题

那下面呢我们来看一个特殊情况,遍历修改

这段代码呢我们在课件上其实也已经讲过

那我们看一看,如果你这个lst这个变量里面,这个列表存放的是一个不同类型的数据

我还要对它进行乘2的操作,这样一个结果会是什么样的呢?

我们来看一下,运行一下,好,并没有报错,语法上是可以接受的

好,我们来看一下结果是多少,0,那就是0乘以2等于0,没问题

3.14乘以2也是有意义的,6.28,字符串OK乘以2,它变成了OK、OK

等于是重复写了一遍,这跟lst乘法是类似的

那么再看,这本身是一个列表类型,它如果进行乘2运算呢,它也是有意义的

abab,列表长度呢翻了一倍,元素呢重复了一遍

那么下面呢是这个True,True是个布尔类型,对它来讲实际上布尔类型就是True或False

取反运算,用的比较多,那么在这True乘以2等于多少呢

同学们可能觉得很奇怪,为什么等于2呢,为什么等于2呢

就意味着True实际上代表的是1么?大家可以做这样的推测

我们再来试一下,我们把这个2呢再改一下,我们把这个2改成3

再运行一下,大家可以思考一下,可能会发生什么事情

True返回的是3,没有错,还记得我们在讲算术运算符的时候

我给大家专门讲过,在Python中它的非0实际上代表的是True,0代表的是False

那么这个呢是个不太严格的定义,但是在Python中是支持这么做的

那么我们再来做一个特例,我们把这个乘以3呢改成乘以0

我们看看这些数据类型有意义么?好,来看看

0乘以0当然是0,3.14乘以0也是0,OK乘以0变成了空字符串

那么a和b乘以0变成了空列表,True乘以0变成了0

实际上大家可以想象,虽然这没有发生什么语法错误

但实际上得到的这个新的列表已经没什么意义了

已经跟最初的列表大相径庭了,所以呢我在这要强调的第一个问题是什么呢

一个列表虽然可以存放不同的数据类型,但是建议大家最好存放同样的数据类型

这样你在操作的时候才能保证它在任何时候都是有意义的

好,下面呢,我还想强调一个问题,对于初学的同学来讲呢

这个理解起来可能会有些困难

这样一个表达式可能很多同学们会有疑问

老师你不是说它是循环遍历么,那么我就把0带进来,写在这里

那么这个也是lst i啊,我也把0带进来

那么0等于0乘以0,那么这是一个数怎么给它赋值呢?

比如说我们再来,3.14带进来这是3.14,这个带到这个位置也是3.14

乘以0,这个式子显然是莫名其妙的,那实际上同学们呢千万要注意

在等号左侧和右侧这个元素的表示是不同含义的

那么在等号的右侧它表示的是具体的值

而等号的左侧它表示的是一个变量

这有点类似于什么呢?同学们还记得这样的表达么?

在数学当中我们经常遇到这样的表达

X等于5,等于5,然后我们这样写X=X+1

同学们还记得么?在数学当中我们曾经这样写过

那么它的含义同学们一目了然

这个X会带到等号右边的这个X里面

那么这个X呢实际上是变量的意思,那么这个时候5加1等于6

新的X呢应该是6,我们输出一下是不是这么回事

好,运行一下,答案是6,没错

好了,关于列表的基本操作呢,我就想给大家先强调这么多

后续的更复杂的内容我们会有专门的一节课给大家再来讲解

今天的课就讲到这里

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

列表笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。