目录
一、从列表中获取元素
跟数组一样,我们可以通过元素的索引值index从列表获取单个元素,注意,列表索引值是从0开始的。
下面实现了让列表的前两个位置互换
二、从列表删除元素
1.remove()
2.del
remove()方法并不能指定删除某个位置的元素,这时要用del实现。del是一个语句,不是一个列表的方法。如果想删除整个列表,还可以直接用del加列表名删除
3.pop()
Python中的列表是利用栈来进行存储的,pop()方法默认是弹出列表中的最后一个元素。当你为pop()方法加上一个索引值作为参数时,它会弹出这个索引值所对应的元素
三、列表分片
利用索引值,我们可以每次从列表获取一个元素。当我们一次性需要获取多个元素,可以利用分片来简单实现我们的要求
1.用一个冒号隔开两个索引值,左边是开始的位置,右边是结束的位置。注意,结束位置上的元素是不包括的。利用列表分片,可以得到原来列表的拷贝,原来的列表并没有发生改变。
2.如果没有开始位置,默认开始位置是0。
3,如果要得到从指定索引值到列表末尾的所有元素,把结束位置元素省去即可。
4.如果没有索引值,而只是一个冒号,将会得到整个列表的拷贝
注意,列表分片就是建立原列表的一个拷贝,所以你想对列表做出某些修改,但同时你想保持原来那个列表,那么直接使用列表分片的方法来获取拷贝就很方便了。
四、列表分片的进阶玩法
分片操作还可以接受第三个参数作为步长,默认情况下是1
如果列表分片写为[::2]
如果列表分片写为[::-1],将会得到一个反转的原列表
五、课后题
测试题:
0. 下边的列表分片操作会打印什么内容?
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[2:5]
1. 请问 list1[0] 和 list1[0:1] 一样吗?
2. 如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
3. 有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?
4. 在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。
1 |
|
>>> list1[0:6:2]
[1, 2, 7]
那么依你推测,关于步长的知识点还有哪些(很多知识点都是通用的)?
5. 课堂上小甲鱼说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?
答案
0.
1.不一样。前者返回的是列表的第0个元素,后者返回的是只含有第0个元素的列表
2.
小甲鱼答案:
这里我歪打正着产生了些许疑问,疑问和解决方案详见网址:参考外链
3.
Python 的列表很聪明,竟然支持负数索引,如图:
正常索引是从左到右索引,负数索引是从右到左。
4.
1) 之前提到的“简洁”分片操作在这里有效:
>>> list1[::2]
[1, 2, 7]
2) 步长不能为0,要不就走不动了:
>>> list1[::0]
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
list1[::0]
ValueError: slice step cannot be zero
3) 步长可以是负数,改变方向(从尾部开始向左走)
>>> list1[::-2]
[8, 9, 3]
5.是不可以的。根据我们之前使用分片创建列表的拷贝
看上去貌似是一样的,但是我们对list1进行排序
发现了吧,list1进行排序,list2并没有受到影响,list3跟着list1改变了。这是因为Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪。