知识点总结
- 从列表中获取元素
- 通过元素的索引值(index)从列表中获取单个元素,注意:列表索引值从0开始的
- 利用中间值,把两者进行交换,
x,y=2,7;temp = y;y=x;x=temp
name = ['鸡蛋','鸭蛋','鹅蛋','李狗蛋'];name[1],name[3] = name[3],name[1]
- 从列表删除元素
menber.remove("艺睛")
,删除不在列表中的元素,会报错抛出异常,只需要知道元素存在列表中就可以啦del menber[1]
指定删除列表中的某个位置的元素- 删除这个列表 ,直接用del加列表名删除
menber.pop()
,删除列表中最后面的一个元素,会把踢除的元素放出来menber.pop(1)
,当你为它加上一个索引值作为参数的时候,它会弹出这个索引值对应的元素
- 列表分片,不包括最后面的元素
- 一次性获取多个元素,如果没有开始位置,Python会默认开始位置是0
menber[1:3]
拷贝列表的某一部分而已,没有修改原列表menber[:3]
默认从0开始截取到3(不包括3)menber[1:]
从1开始到最后的位置,要得到从指定索引值到列表末尾的所有元素,把结束位置省去即可menber[:]
拷贝原列表- 分片操作实际上还可以接受第三个参数,其代表的是步长,默认为1
代码实例:
menber = ["小甲鱼","小不点","黑夜"]
temp = menber[0]
menber[0] = menber[1]
menber[1] = temp
列表分片的进阶玩法:
list1 = [1,2,3,4,5,6,7,8,9]
#每前进两个元素才取一个出来
list1[0:9:2]
list1[::2]
#步长设置为-1,就相当于是复制一个反转的列表
list1[::-1]
课后习题
测试题
题1:下边的列表分片操作会打印什么内容?
>>> list1 = [1,3,2,9,7,8]
>>> list1[2:5]
运行结果:
[2, 9, 7]
题2: 请问list1[0]和list1[0:1]一样吗?
#不一样,list1[0]返回第0个元素的值,list1[0:1]返回一个只含有第0个元素的列表。
>>> list1[0]
1
>>> list1[0:1]
[1]
题3: 如果你每次想从列表末尾取出一个元素,并将这个元素插入列表的最前边,你会怎么做?
>>> list1 = [1, 3, 2, 9, 7, 8]
>>>
>>> list1.insert(0,list1.pop())
>>> list1
[8, 1, 3, 2, 9, 7]
题4: 试试打印list1[-3:-1]
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[-3:-1]
[9, 7]
python 的列表很聪明,支持负数索引,如图:
正常索引是从左到右索引,负数索引是从右到左。
在进行分片的时候,我们知道分片开始和位置结束需要进行指定,但其实还有另外一个隐藏的设置:步长
在普通的分片操作中,步长默认设置为1,表示逐个遍历元素。其实我们可以人为调整步长达到不可告人的秘密。
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[0:6:2]
[1, 2, 7]
>>> list1[::0]
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
list1[::0]
ValueError: slice step cannot be zero
>>> list1[::-2]
[8, 9, 3]
可用利用分片完成列表的拷贝list2 = list1[:],那事实上可不可以直接写成list2 = list1更加简洁呢?
例如:
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]
>>> list2
[1, 3, 2, 9, 7, 8]
>>>
>>> list3 = list1
>>> list3
[1, 3, 2, 9, 7, 8]
>>>
看上去貌似一样。但事实上呢?我们利用列表的一个方法进行修改,看下差别:
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9]
>>> list2
[1, 3, 2, 9, 7, 8]
>>> list3
[1, 2, 3, 7, 8, 9]