从本篇文章开始,我们要花很多的时间和精力学习一种新的概念-数据结构。数据结构是通过某种方式(如对元素进行编号)组织在一起的数据元素的集合,这些元素可以是数字或字符。
而在Python中最基本的数据结构形式就是序列,Python中有常见的6种内建序列,分别为列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。接下来我们先从基础入手,看一下序列中常见的操作都有哪些。
所有的序列都有一些通用操作,包括索引、分片、序列相加、乘法、成员资格、长度、最小值和最大值。
Python作为一门不断发展与普及的语言,还在不断更新中。在学习时,建议找一些学习伙伴一起来学习和讨论,效果更佳。如果想学习Python,欢迎加入Python学习交流群(1104627612),一起督促,一起学习。
1.索引
序列是Python中最基本的数据结构。序列中的每个元素都会被分配一个数字,代表它在序列中的位置(即索引)。但是第一个索引是从0开始的,第二个索引是1,以此类推。
根据序列中的索引值可以访问序列中的元素值,获取元素的方式为:在变量后加中括号,在中括号内输入所取元素的编号值。这里的编号就是索引,可以通过索引获取元素。所有序列都可以通过这种方式进行索引。
字符串是由字符组成的序列,索引0指向第一个元素,以此类推。操作如下图所示:
示例中索引的编号是通过从左往右的方式进行获取的,而Python中也支持从右往左的方式获取,最右边的元素索引值为-1,从右向左递减。这种从右往左的索引被称为负数索引;从左往右的索引称为正数索引。使用负数索引时,Python会从最后一个元素开始计数,最后一个元素的位置编号是-1。
在这里可以看出,直接使用索引的话,不定义变量进行引用也是可以的,直接使用索引的效果和定义变量的效果是一样的。即便到后面,学习完毕函数之后,针对函数返回的序列,也可以对返回结果直接进行操作,后续我们会学习到。
Python作为一门不断发展与普及的语言,还在不断更新中。在学习时,建议找一些学习伙伴一起来学习和讨论,效果更佳。如果想学习Python,欢迎加入Python学习交流群(1104627612),一起督促,一起学习。
2.分片
索引专门用来对单个元素进行访问,使用分片可以对一定范围内的元素进行访问,分片的格式通过冒号相隔的两个索引实现。操作如下图所示:
在这个示例操作过程中,分片操作的实现需要提供两个索引作为边界,第一个索引的元素包含在分片内,第二个索引的元素不包含在分片内。类似于数学中区间的左闭右开,使用不等式表达就是a<=x<b,x是我们需要得到的元素,a是分片操作中的第一个索引,b是第二个索引,b是不包含在x的范围之内。
在之前学习序列的时候,序列中索引的最大值是元素个数减1,那使用分片操作的时候,如果想打印出最后一个元素,那就需要原来索引值来配合分片操作,这样才能得到最后一个元素。
那么如果使用负数索引,如何获得最后一个元素,按照逻辑应该如下图所示:
这个输出和预期并不一致,不但没有数值,只是输出了一个空的序列。这是因为只要在分片中最左边的索引比它右边的索引晚出现在序列中,结果就是一个空的序列。在序列中,索引值-3代表倒数第3个元素,0代表的是第一个元素,倒数第3个元素比第1个元素晚出现,即排在第1个元素后面,所以得到的结果是空序列。
那么如果我们想通过负数索引的方式获得最后一个元素呢?在Python中有一个快捷的方式,那就是将最后一个索引置空,即可获得我们想要的元素。操作如下图所示:
这种快捷方式同样适合于正数索引,如果想使用置空的索引进行输出一样是可以的。比如我们要打印前3个元素,操作如下图所示:
如果我们想打印整个序列,那我们就有了一个快捷的方式,那么就是置空前后两端的索引值,这样就可以直接输出整个序列,操作如下图所示:
在分片操作的时候,分片取出序列中连续的元素是没有问题的,但如果要求取出序列中非连续性的元素,就不能够直接操作了。针对这种情况,Python中引入了一个新的参数——步长(step length),但是这个参数通常是隐式设置,索引值的中括号内就有默认的步长值1,所以如果没有单独书写步长的值,分片操作时会按照默认步长值1进行遍历后返回开始和结束点之间的所有元素。操作如下图所示:
如果我们需要取a列表中的奇数,那我们可以设置索引值的同时,设置步长值为2。操作如下图所示:
设置前后索引值为空,步长同样适用,但是要注意步长值是不可为空。步长值默认为1,如果将步长值变更为0,编译时就会发生错误。操作如下图所示:
上述中的错误类型为值错误:切片步长不能为0,但是切片步长是支持负数的,如果取出a列表中的偶数,正向排列可以获得一种,负数索引的倒序排列也可以获得,操作如下图所示:
对于正数步长,Python会从序列的头部开始从右提取元素,直到最后一个元素;对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素。但是正数步长必须让开始点小于结束点,而负数步长必须让开始点大于结束点。如果使用了负数步长,还需要考虑序列中的索引值需要置空,否则取不到最后一个元素,操作如下图所示:
3.序列相加
使用算术运算符的加号可以实现序列相加的操作,相加的实质就是序列的连接。定义一个列表a = [1,2,3] b = [4,5,6],然后使用加号进行连接,输出结果就是一个新的列表为[1,2,3,4,5,6],操作结果如下图所示:
序列相加支持纯数字的序列相加,也支持字符串序列相加。但是不能够出现数字序列和字符串序列进行连接,否则编译时会出现错误,页面提示只能列表和列表相连。操作结果如下图所示:
所以只有类型相同的序列才能通过加号进行序列连接操作,不同类型的序列不能通过加号进行序列连接操作。
Python作为一门不断发展与普及的语言,还在不断更新中。在学习时,建议找一些学习伙伴一起来学习和讨论,效果更佳。如果想学习Python,欢迎加入Python学习交流群(1104627612),一起督促,一起学习。
4.序列相乘
序列的相乘使用的是算术运算符中的乘法符号——“*”,但是这里的乘号跟数学中的乘法完全不同,如果用一个数字a乘以1个序列b或者用一个序列b乘以一个数字a都会获得一个新的序列,在新的序列中,原有的序列b被重复a次,这就是序列相乘的应用。操作如下图所示:
乘法通常用来创建重复序列,如果想要得到某个较长序列长度的数字,这样可以快速得到需要的列表,操作起来较为容易。
5.成员资格
为了检查一个值是否在序列中,Python中可以使用in运算符来进行判断。它用于检验某个条件是否为真,并返回检验结果,检验结果为真返回True,结果为错则返回False。只有True和False两个值的结果为布尔运算符,返回的真值和假值就是布尔值。
判断某个字符或者某个数字是否存在于序列中,使用in运算符,如果存在于序列当中,返回结果为True;如果不存在于序列当中,返回结果为False。操作结果如下图所示:
6.长度、最小值和最大值
作为序列的属性值,Python提供了长度、最大值和最小值的内建函数来使用。对应的函数名称是len、max和min。长度是指序列中元素的个数、最大值和最小值函数的参数是以序列中多个数字作为参数,求取这些数字中的最大值和最小值。操作如下图所示:
Python作为一门不断发展与普及的语言,还在不断更新中。在学习时,建议找一些学习伙伴一起来学习和讨论,效果更佳。如果想学习Python,欢迎加入Python学习交流群(1104627612),一起督促,一起学习。