011,列表2
011,列表2
从列表中获取元素:
跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意:列表索引值是从0开始的。如以下这个列表:
跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意:列表索引值是从0开始的。如以下这个列表:
>>> member = ['初一', '初二', '初三', '初四', '初五']
>>> member
['初一', '初二', '初三', '初四', '初五']
>>> member[0]
'初一'
>>> member[1]
'初二'
>>>
如果元素“初二”想排在“初一”前面,该如何调换其位置呢?我们可以用一个中间值(临时的变量)如:
从列表中删除元素,有三个方法:
remove()
答:-3只是倒数而已。如list1,0的位置对应的是1,那么-1的位置对应8,-3位置对应9
论坛参考答案:
Python 的列表很聪明,竟然支持负数索引,如图:
正常索引是从左到右索引,负数索引是从右到左。
4.在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。
复制代码
那么依你推测,关于步长的知识点还有哪些(很多知识点都是通用的)?
答:理解,但不知。
论坛参考答案:
1) 之前提到的“简洁”分片操作在这里有效:
复制代码
2) 步长不能为0,要不就走不动了:
复制代码
3) 步长可以是负数,改变方向(从尾部开始向左走):
复制代码
5. 课堂上小甲鱼说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?
答:可以。吧。。
论坛参考答案:(比较长,有价值)
千万不可以!
好的,为了大家都可以弄明白这个【必须理解】的概念,我啰嗦一下:
上节课我们提到使用分片创建列表的拷贝,例如:
复制代码
看上去貌似一样的,对吧?但事实上呢?我们利用列表的一个小伙伴做下修改,大家看一下差别:
复制代码
看到吧,我们的list1已经从小到大排了个序,那list2和list3呢?
复制代码
可以看到我们使用分片的方式得到的list2很有原则、很有格调,并不会因为list1的改变而改变,这个原理我待会儿跟大家说,我们接着看下list3:
复制代码
大家可以看到了,真正的汉奸、墙头草是list3,Ta跟着list1改变了,这是为什么呢?
不知道大家还记不记得我们在讲解变量的时候说过,Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,呃,我还是给大家伙画个图好。
这下大家应该明白了吧,在为一个固定的东西指定另一个名字的做法,只是向同一个东西增加一个新的标签而已。
>>> temp = member[0]
>>> member[0] = member[1]
>>> member
['初二', '初二', '初三', '初四', '初五']
>>> member[1] = temp
>>> member
['初二', '初一', '初三', '初四', '初五']
>>>
remove()
>>> member
['初二', '初一', '初三', '初四', '初五']
>>> member.remove('初四')
>>> member
['初二', '初一', '初三', '初五']
>>>
但如果删除一个列表里不存在的元素会如何?
答:
>>> member.remove('初六')
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
member.remove('初六')
ValueError: list.remove(x): x not in list
>>>
是的,会报错。
del 语句
del 语句
>>> member
['初二', '初一', '初三', '初五']
>>> del member[1]
>>> member
['初二', '初三', '初五']
>>>
del也可以删除整个列表,如del member那么这个列表就从内存里删掉了。
pop()
pop是从列表中取出最后一个元素,并返回给你。如:
1. 请问 list1[0] 和 list1[0:1] 一样吗?
答:不一样。list1[0]是取一个值,list1[0:1]是取一个列表的分片。
论坛参考答案:不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表
2. 如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
pop()
pop是从列表中取出最后一个元素,并返回给你。如:
>>> member.pop()
'初五'
>>> member
['初二', '初三']
>>>
pop也可以作为一个变量的赋值如:
答:[2,9,7]>>> member
['初二', '初三']
>>> name = member.pop()
>>> member
['初二']
>>>
pop还可以加上一个参数,如列表的索引值:
列表分片(切片)(slice)
利用索引值,每次我们可以从列表中获取一个元素,但如果一次性需要获取多个元素怎么办呢?利用列表切片,我们可以简单实现这个要求。如:(注意:原列表不受影响)
列表的索引是从0开始的,切片结束位置并不包含该位置的元素,如果需要取‘初一’,‘初二’,‘初四’这三个元素(实际上是0,1,2),那么切片位置将设置为3
如果切片起始位置是列表的第一位即0,则可以简写,如
>>> member = ['初一', '初二', '初三', '初四', '初五']
>>> member
['初一', '初二', '初三', '初四', '初五']
>>> member.pop(1)
'初二'
>>> member
['初一', '初三', '初四', '初五']
>>>
利用索引值,每次我们可以从列表中获取一个元素,但如果一次性需要获取多个元素怎么办呢?利用列表切片,我们可以简单实现这个要求。如:(注意:原列表不受影响)
>>> member
['初一', '初三', '初四', '初五']
>>> member[1:3] #切片用冒号分开,第一个数字表示起始位置,第二个数字表示结束位置
['初三', '初四']
>>>
如何理解起始位置和结束位置?如下图
>>> member
>>> member
['初一', '初三', '初四', '初五']
0 1 2 3
0 1 2 3
列表的索引是从0开始的,切片结束位置并不包含该位置的元素,如果需要取‘初一’,‘初二’,‘初四’这三个元素(实际上是0,1,2),那么切片位置将设置为3
如果切片起始位置是列表的第一位即0,则可以简写,如
>>> member[:3] #起始位置为第一位
['初一', '初二', '初三']
>>> member[1:] #从起始位置起一直切到最后
['初二', '初三', '初四', '初五']
>>> member[:] #拷贝整个列表。
['初一', '初二', '初三', '初四', '初五']
>>>
member[:]拷贝有大作用,如:
测试题:
0. 下边的列表分片操作会打印什么内容?>>> member2 = member[:]
>>> member2
['初一', '初二', '初三', '初四', '初五']
>>>
测试题:
- >>> list1 = [1, 3, 2, 9, 7, 8]
- >>> list1[2:5]
1. 请问 list1[0] 和 list1[0:1] 一样吗?
答:不一样。list1[0]是取一个值,list1[0:1]是取一个列表的分片。
论坛参考答案:不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表
2. 如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
list1 = [1, 3, 2, 9, 7, 8]
num = list1.pop()
list1.insert(0,num)
print (list1)
论坛参考答案: list1.insert(0, list1.pop())
3. 有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?答:-3只是倒数而已。如list1,0的位置对应的是1,那么-1的位置对应8,-3位置对应9
论坛参考答案:
Python 的列表很聪明,竟然支持负数索引,如图:
正常索引是从左到右索引,负数索引是从右到左。
4.在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。
在普通的分片操作中,步长默认设置为1,表示逐个遍历元素。其实我们可以人为调整步长以达到不可告人的秘密。
- >>> list1[0:6:2]
- [1, 2, 7]
答:理解,但不知。
论坛参考答案:
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]
答:可以。吧。。
论坛参考答案:(比较长,有价值)
千万不可以!
好的,为了大家都可以弄明白这个【必须理解】的概念,我啰嗦一下:
上节课我们提到使用分片创建列表的拷贝,例如:
- >>> 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]
看到吧,我们的list1已经从小到大排了个序,那list2和list3呢?
- >>> list2
- [1, 3, 2, 9, 7, 8]
可以看到我们使用分片的方式得到的list2很有原则、很有格调,并不会因为list1的改变而改变,这个原理我待会儿跟大家说,我们接着看下list3:
- >>> list3
- [1, 2, 3, 7, 8, 9]
大家可以看到了,真正的汉奸、墙头草是list3,Ta跟着list1改变了,这是为什么呢?
不知道大家还记不记得我们在讲解变量的时候说过,Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,呃,我还是给大家伙画个图好。
这下大家应该明白了吧,在为一个固定的东西指定另一个名字的做法,只是向同一个东西增加一个新的标签而已。