delphi报列表索引越界怎么处理_【挑战自学Python编程】第四天:进一步使用列表...

d5d0d35a590a35593480b2d5ac39ece3.png

摘要

01 for循环语句

02 数字列表

03 切片(slice)与元组(Tuple)

04 今日回顾

ef66408d763fb23f15d18e10feda96a9.png

01 for循环语句

首先,来看一个例子。

6ac17444c3e1170a5a079e1f1e3798fb.png

在这个程序中,第二行中,我们使用了一个 变量member,这一行程序将会使程序将列表family中的第一个值储存到变量member当中,接着往下,我们使用print语句将member打印了出来,由于我们使用了for语句,并且family中还有元素,所以程序将会再次运行第二行,这一次会将列表中的第二个值赋给变量member,再接着运行print语句,整个程序会循环运行,直到列表中的最后一个元素被赋给变量member。

那么我们来稍微总结一下,这里的for循环语句可以这样来看,

for 变量 in 集合 :

那么这一句作用就是,依次将集合中的值赋给变量,直至集合中的最后一个值赋给变量。

那么要如何使用形如for 变量 in 集合 : 这样的for循环语句呢?

首先来看,以冒号结尾。冒号会告诉Python,从接下来的第一行开始,for循环语句就开始了。那么Python如何知道接下来的程序里,哪些是for循环内部的语句,哪些不是for循环语句内部的呢?我们看下一个例子。

8e27a1058a580098ffc30f24421565d4.png

可以看到,其中第三行与第四行都循环运行了,而第五行则只运行了一次。或许你也发现了,关键就在于第三行,第四行语句前的空格,我们将之称为缩进。

缩进

在Python中,缩进用以确定一行代码与上一行代码的关系。在for循环语句中,冒号后缩进了的代码被视为循环内的内容,而从第一行未缩进的代码开始往后则不被视为循环内容。

8e27a1058a580098ffc30f24421565d4.png

也正是这样,第三行与第四行因为有缩进,所以被视作for循环内的内容而循环执行,但第五行则没有缩进因而不被循环执行。

我们要知道缩进与空格不完全是一回事。在Python中,缩进是使用Tab键(也说制表符键)键入的,而空格则是空格键键入的,你可以使用多个的空格(具体是几次可以在你的文本编辑器里设置,通常使用四个空格)来用作缩进,也可以直接按下Tab键直接键入缩进(默认的缩进长度是四个空格),但是二者之间绝对不能混用!!!如下图,

d69cbe201e173eceb5e484bea80afe41.png

使用空格来做缩进,没有问题,同样的直接使用Tab键键入缩进也没有问题,见下图

c6fbebbe8b6a5551621b3ebdd8b46475.png

但如果我混用了空格与缩进,那么就会出问题。如下图

cb74468cd90d742521b4ae711eff0ec2.png

看起来并无差别,但如果选中我们就发现其实我混用了空格与缩进,如下图

60763d29e0fb5d18f29a57cc4839f192.png

那么如果我们来运行这个程序,会出现什么?

e42d0b8a3d997137e8570c3cda87fcf4.png

出现了报错程序!所以!千万不要混用空格与缩进!!!

02 数字列表

什么是数字列表呢?简而言之,元素全是数字(Number)的列表。

例如这样[1,2,3,4,5,6,7,8]

函数range()与list()

range()

作用:

类似一个整数“列表”(不是数据类型列表),可用于创建数字列表

使用方式:

range(stop);range(start,stop,step)

用中文来写就是range(最大值),range(最小值,最大值,步长)

函数list()可以使将range()函数生成的数字转换为列表,可与range()函数一起使用,用以快速生成数字列表。

示例:

fe9a609361dc8e6f3a25bad651d5de09.png

需要注意的是,range(1,6)生成的数字到5截至,也就是说,range()函数生成的数字是从指定的最小值开始,到最大值的前一个数,且要注意,生成的数都是整数。如果没有指定最小值,例如range(6),那么默认的最小值是0。

此外,range()函数的步长(就是两个相邻数字之间的差)默认为1,但也可自己来设定,用以生成类似奇数列或者偶数列。但要记得,如要规定步长,一定要设定最大值与最小值,如下图,输出了0到8间的偶数,

283db2c0ff63be2ef1538defd6282b0b.png

同理,也可以输出奇数列,我们只需要调整一下起始值。

385ac6b04e3a311f6e8c3d7bbac7705f.png

对数字列表进行简单计算

三个函数:min() , max() ,sum()这三个函数都是对数字列表使用的其意义分别为:找出最小值,找出最大值,列表数字求和

如下图所示:

442df3ccf5ad614442ce6e1eb98c416f.png

03 切片(slice)——使用列表的一部分

把整个列表比作一块肉,你可能不想吃两边的肉,只想吃中间那块里脊肉,而这块中间被你切下来的肉就是切片(slice),那么要怎么处理呢?

我们之前有学到,访问列表中的某个元素的方法是 列表名[索引],那么类似的,访问切片的方式是 列表名[起始索引:终止索引] 例如:

8a53738b8274429b63c90e94003edf0a.png

可以看到,在第五行当中,我们使用了一个列表切片,我们指定的索引是[0:2],输出的结果是列表中第一个与第二个值,因此,切片的索引范围与函数range()的范围类似,都是由指定的起始值,到指定的最大值的前一个值。

那么现在,可以思考一个问题:

如何将一个列表内的值依次打印出来呢?

我们尝试使用前面学到的函数,

9a3f613002377900653ed411cde4c0e5.png

这个过程,用中文来说,叫做,遍历列表。

同样的,我们只需要将在列表的后面填上索引范围就能实现遍历列表切片。如下图,

82c73f338cc1a25d987322351e04e243.png

如果在使用切片时指定了终止索引,未指定起始索引,那么默认从头开始到终止索引;

如果指定了起始索引,未指定终止索引,那么默认从起始索引到列表结尾。

如果两个索引都为指定,形如列表名[:],只有一个中括号以及冒号,那么意味着,这是一个副本切片,类似于将原列表复制了一份。

接下里,我们做一件事:复制列表

现在我给出这样的一个列表[1,2,3],将其储存到变量list_1中,并且完成复制,将复制的列表储存到list_2中,再将列表list_1修改为[1,2,3,4].

完成后分别打印出list_1,list_2

我猜想,你会这样去做:

c2d5d11adf90280b378f7468283b2a51.png

并且你认为输出的结果应该是这样的

2ad1af0bcc88302a5487c58e2ea9d922.png

但实际上却是这样的

a402c463ff55d713afcafc64bb20bd01.png

????????

突然就开始怀疑Python,怀疑人生了。

不慌,我们改改程序试试看,

e31aaa8c271619fbbb0e242fd8f38706.png

在将第二行的list_2=list_1 改为list_2=list_1[:] 之后貌似就达到了预期效果,这是为什么呢?

要来解释这一点,我们就要回到变量说起了,

大家应该还记得,变量是一个存储地址,没错只是一个地址,只意味着变量本身是不包含任何数据的,包含数据的是放在这个变量盒子中,那些叫做整数,字符串,列表的东西。

在第一次的程序中,

7f33523201150421915feae06c75d313.png

第一行我们将列表[1,2,3]定向(可以理解为取了一个名字)到变量list_1,第二行list_2=list_1则是将list_1定向到了变量list_2,

这两次操作就类似于,给一个人取了两个名字。我们原先有一个列表[1,2,3],先是给这个列表取名list_1,然后又给list_1取名为list_2,那么也就是说,列表[1,2,3]同时有了两个名字list_1和list_2,那么无论你叫list_1还是list_2其实都是指的同一个东西,这也就是为什么第一次尝试的时候会失败。

而第二次的程序,

6b65ab2653ed8d26ca282b25556dfc63.png

我们在第二行这样写 list_2=list_1[:] ,是将list_1的切片定向到了变量名list_2, 也就是说,在执行切片操作后,原来只有一个列表,但现在就有两个列表。

如果实在无法理解,可以先强行的记住。

元组(Tuple)——标准的数据类型

元组与列表极为类似!!!

现阶段,你可以将元组视为列表,但是有两点区别:

  1. 元组不使用方括号,使用圆括号,如:tuple=(1,2,3)
  2. 元组在定义之后无法修改,只能重新定义也就是说在定义一个元组 tuple=(1,2,3)之后,你无法使用例如append(4)这样的方法进行修改,使其成为(1,2,3,4)但你可以再次定义也就是 tuple=(1,2,3,4)来达到你想要的效果。

04 今日回顾

  1. for语句的使用
  2. 如何生成数字列表
  3. 切片的使用

ef66408d763fb23f15d18e10feda96a9.png

此外,在最后,介绍一下注释功能,Python会将#后面的代码视为注释,注释不会运行。

ef66408d763fb23f15d18e10feda96a9.png

加入我们一起【挑战自学Python编程】

明日内容:if语句

(需要练习或者其他资源可以关注我,交个朋友!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值