四时宝库

程序员的知识宝库

4个项目学会python 嵌套列表#如何学习编程

其实列表中的数据的数据类型并不是要完全一样,就比如有这样一个列表,这个列表里面有整数、有列表、有字符串,尝试打印一下,运行会发现没有任何问题。之所以在前面的视频没有提到这个特性,有两个原因。

·第一个原因就是降低初学者的难度,让记忆负担更小。

·第二个原因就是编码规范。还是比较喜欢一个列表里面的数据是同一个类型的,而不是这样花里胡哨的大杂烩。

再回过头来看一下data1,data1里面到底有几个数据?同样可以打印一下len,还记得len吗?就是获取列表的长度,看一下,5个。为什么是5?这个是第一个,这个是第二个,这个整体是第三个,这个是第四个,这个是第五个,不信可以验证一下。

比如想拿到这个列表,它的下标是不是2?所以来打一下data1,2,是不是这个列表?如果想拿到5怎么办?这个也好办,这玩意是它,这是个列表。如果后面再加一个中括号,来个2,是不是相当于是拿列表里面下标为2的数据,就是5?来验证一下,没错。

再来一个,比如想拿到列表的长度,怎么搞?也很简单,len,然后把列表扔进来就可以了。这个列表是什么?是不是data1[2]?来搞一下,3。所以不管列表里面到底装的是些什么牛鬼蛇神,是不是都能够把数据拿过来?

接下来再来看这个东西,data2是什么?是个列表,而且列表的长度是3,每个数据又是一个长度为4的列表。嵌套列表怎么理解?其实把它看成是个长方形就可以了,比如这里12个值,其实就相当于是123456789101112,这是第一个,这是第二个,这是第三个,是不是像一个长方形?而且是一个3行4列的长方形。像这种形状上有行有列的也把它称作二维列表,在别的语言里面叫二维数组,在Python里面就是二维列表。

这种二维列表能有什么用?其实日常生活中很多数据都可以用二维列表来表示,就比如扫雷的地图、围棋的棋盘、植物大战僵尸里面植物所可以摆放的格子、1张图片、一个Excel表格。如果能脑补出二维列表和这些东西的关系,恭喜你,已经领悟了二维列表的精髓。

接下来再来做个题,就是找出data2里面的最大值。上集视频中已经学会了如何在一维列表中通过遍历去寻找最小值,所以像这些代码其实可以把它给抄过来,然后改一改,改成二维列表的代码,然后就贴过来。

想一下,要在二维列表里面把最大值找出来,其实和在一维列表里面把最大值找出来是不是一样的?本质上是没有区别的。也就是不管怎么样,都是要把所有的数据都看一遍才知道谁才是最大的。所以这里就需要把这个东西给删掉,然后minvalue改成maxvalue。

因为找到是最大值,最大值的初始值应该是多少?假设是从最左上角开始,每次都是从左到右,再从上到下,从左到右,再从上到下,最大值的初始值应该就是1。

1怎么表示?很简单,1是不是在data2的列表里面的下标为0的列表里面,所以data2[0]列表里面,列表里面的下标为0的值才是1,所以[0]。而且从注释也能看得出来,这两个中括号里面第一个中括号代表的是下标为几的行,就比如来个12,就相当于是在下标为1的行,也就是这一行里面的下标为2的那一列,就是它。

所以这样一看,1肯定就是第0行第0列。

·接下来就是index,index这个东西光一个够用吗?肯定不够用,因为如果想要拿到里面具体的某个数据,我是要有两个下标的,一个来代表是第几行,另一个代表是第几列。所以这里不如搞两个变量,比如一个叫rr就代表第几行,最大值默认是它,最先要开始看的数据是不是2,2的行下标是不是0,列下标应该是1。

·所以再搞个变量,比如c表示第几列,那就是1。有了这两个玩意之后,接下来就可以来写循环的代码了。循环的条件应该是什么?要拿数据,要根据行和列的下标来,行的范围应该是多少?是不是从0到2?2怎么表示?是不是len(data2),所以就是r<len(data2)。

·有了行的范围之后,是不是还要考虑列的范围?不管是哪一行,列的范围是不是012301230123,所以还需要搞一个循环来表示当前看到了某一行的第几列。这个东西就是c小于什么?这个的长度,这个的长度其实就是len(data2[r),第r行的长度,来一个冒号。

·完了之后,这个里面是不是就可以根据r和c这两个下标来拿data2里面的数据了?所以先把这个东西怼过来,然后把这个删掉,data2。然后是拿第r行第C列的值,所以这个应该是r,这个应该是c,要找的是最大值,所以这里应该是改成大于号。如果比当前认为的最大值还大,那么这个最大值就应该是等于它。

·接下来循环里面是控制到底看到的第几列,所以c肯定是要往3这边靠的,所以这里是c加等于1。

·接下来一行看完之后要切到下一行去,所以加等于1。

·最后把Max value扔过来打印验证一下,为了减少干扰把前面的代码注释掉,就是这个东西注释掉。

·然后来运行,不对劲,来插断点调一下,点一下,debug,卡到这了,F8,F8,F8,走,max value到4了,就说明已经到这了。

·接下来就是看下一行,r就会变成1,走,变成1之后确实又会进来,再下来,下来之后c是等于4的。

·讲道理,看第二行的时候一开始c应该是等于0,所以这样子循环肯定是进不去了,进不去Max value就会一直卡在4这个地方。

所以症结就在于每一次换行的时候,也就是切到下一行看的时候,C还是原来那个值,并不是0,所以应该在这个地方搞一个c等于0。再来试一下,12出来了,再来随便把数据一改,看看最大值能不能找出来,好运行走,99出来了。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接