首页  /  Python教程  /  序列-索引、切片  /  

序列-索引、切片

点击打开在线编译器,边学边练

序列是保存多个数据项的对象,它的存储方式是一个接一个的排列。同时每个元素都会拥有一个值,这个值代表他们存储在序列中的位置,一般我们称它为索引。打个比方来说,一个班级有若干个学生,每个学生都有一个学号,每个学号对应一个名字,而这个学号就是每个学生的索引值。

      在Python中,序列有字符串、列表、元组、字典、集合,对于这些序列,其中集合和字典是不能够使用索引、切片、相加等操作的。

      本章我们将介绍一下索引和切片。

1.索引

      索引作为一种访问方式,我们在访问列表元素的时候最常用到索引。上面我们也提到过,索引值是每个元素对应的位置,那么索引是有一定值的,索引的值是从0开始,因此每个元素对应的位置是他的索引值+1。

      我们定义一个列表

my_list = [1,2,3,4,5]

      我们通过图来看一下

  元素值12345
正索引值01234
负索引值-5-4-3-2-1

      对于正索引值也就是说,第一个元素对应的索引值为0,第二个元素的索引值为1,依此类推,最后一个元素的索引值对应的就是列表内总元素的数量减1。

      而对于负索引值,第一个元素对应的索引值是0,而-1代表的是元素的最后一个,然后依次递减到元素的第一位,如表所示。

      通过实例来看一下:

my_list = [1,2,3,4,5]
print('列表第一个元素',my_list[0])#访问第一个元素,索引值为0
print('列表第二个元素',my_list[1],my_list[-4])#访问第二个元素,正索引值为1,负索引值为-4
print('列表最后一个元素',my_list[4],my_list[-1])#访问最后一个元素,正索引值为4,负索引值为-1

      运行结果为:

列表第一个元素 1
列表第二个元素 2 2
列表最后一个元素 5 5

2.切片

序列的切片就是将序列切成小的子序列,切片运算符有两种形式。

1) [start:end]:start为起始索引位置(包含start),end为结束索引位置(不包含end)。

2) [start:end:step]:同上一样,不同的是step,step为步长,在前面讲range()函数的时候提到过这个,它的用法和前面讲的一样,在这里指切片之间的间隔,但是步长对应的是每两个子序列间的间隔的值减1,不含step时默认为1(此时无间隔),step也可以为负值。

切片在列表操作的时候经常会使用到,使用切片还可以进行列表或字符串的逆序等操作。

我们先通过例子来看一下切片的效果:

my_list = [1,2,3,4,5,6,7,8,9,]
print('取列表的前5项',my_list[0:4])#当0省略的时候默认为0,即为my_list[:4]
print('取列表的第2-4项',my_list[1:4])#注意4是列表的第五项,但是在这里是不包含4的,所以没有第五项
print('取列表所有项,步长为2',my_list[::2])#步长为2,也就是走2步,所以间隔为1
print('取列表的逆序',my_list[::-1])#当步长为-1的时候,也就是反向走了一遍,即为逆序

输出结果:

取列表的前5项 [1, 2, 3, 4]
取列表的第2-4项 [2, 3, 4]
取列表所有项,步长为2 [1, 3, 5, 7, 9]
取列表的逆序 [9, 8, 7, 6, 5, 4, 3, 2, 1]

3.总结

索引和切片在我们学习Python的过程中使用的比较频繁,无论我们是在访问序列中某一项的时候还是我们在遍历序列的时候,通过索引值的方式都可以帮助精准快速的完成操作。切片操作用起来更是方便,很多算法问题我们通过切片解决起来都十分方便,就拿逆序问题来说一下切片,切片能使用字符串、元组和列表,再通过下面一个例子来强化一下对于切片逆序的学习。

a= '123456'
b = (1,2,3,4,5,6)
c = [1,2,3,4,5,6]
a = a[::-1]
b = b[::-1]
c = c[::-1]
print(a)
print(b)
print(c)

输出结果为:

654321
(6, 5, 4, 3, 2, 1)
[6, 5, 4, 3, 2, 1]

通过切片的方式解决一些特殊问题会显得特别方便,本节我们就学习到这里。


本文固定URL:https://www.dotcpp.com/course/237

第一章 人生苦短,我用Python
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 函数
第六章 面向对象编程
第七章 模块
第八章 异常处理和程序调试
第九章 文件及目录操作
第十章 GUI编程
第十一章 进程和线程
第十二章 数据库管理
第十三章 算法
第十四章 爬虫
第十五章 实战篇
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)