课时11:列表:一个打了激素的数组2

目录

一、从列表中获取元素

二、从列表删除元素

三、列表分片

四、列表分片的进阶玩法

五、课后题


一、从列表中获取元素

跟数组一样,我们可以通过元素的索引值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

“在普通的分片操作中,步长默认设置为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的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值