一、测试题
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. 在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。
>>> list1[0:6:2]
[1, 2, 7]
那么依你推测,关于步长的知识点还有哪些(很多知识点都是通用的)?
5. 课堂上小甲鱼说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?
6.请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
二、动动手
无。。
我的答案
一、
0. 打印出:[2, 9, 7]
1. 不一样。list1[0]得到的结果是一个元素对象;list1[0:1]得到的是一个列表。
2. 利用pop弹栈弹出最后一个元素,然后利用insert指定在最前面插入,程序如下:
list1 = [1, 2, 3, 4, 5]
print('原列表:', list1)
for i in range(0,(len(list1)-1)):
temp = list1.pop(len(list1)-1)
list1.insert(0,temp)
print('\t', list1)
#输出结果:
原列表: [1, 2, 3, 4, 5]
[5, 1, 2, 3, 4]
[4, 5, 1, 2, 3]
[3, 4, 5, 1, 2]
[2, 3, 4, 5, 1]
3. 因为python的列表有两个顺序:正序顺序和负序顺序。
正序 | 0 | 1 | 2 | 3 | 4 | 5 |
列表元素 | 1 | 3 | 2 | 9 | 7 | 8 |
负序 | -6 | -5 | -4 | -3 | -2 | -1 |
4. 小甲鱼参考答案
论坛参考答案:
- 之前提到的“简洁”分片操作在这里有效:
>>> list1[::2]
[1, 2, 7]
- 拷贝列表中,步长不能为0,要不就走不动了:
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1 = [ : : 0 ]
SyntaxError: invalid syntax
>>>
- 步长可以是负数,改变方向(从尾部开始向左走):
>>> list1[::-2]
[8, 9, 3]
5. 如果要拷贝列表,一定要写成:list2 = list1[:], 不能list2 = list1.。因为前者是真正意义上的拷贝,后者只是为原来的列表多添了一个标签而已。一定不能偷这个懒!说明程序如下(课堂上的栗子)
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]
>>> list2 #拷贝list1到list2
[1, 3, 2, 9, 7, 8]
>>> list3 = list1
>>> list3 #“拷贝”list1到list3
[1, 3, 2, 9, 7, 8]
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9] #利用sort方法对list1由小到大排序
#此时,再打开list2和list3.发现list2不会排序,list3却和list1一起也进行了排序,这就说明list3根本没有进行实质上的拷贝!!
>>> list2
[1, 3, 2, 9, 7, 8]
>>> list3
[1, 2, 3, 7, 8, 9]
附加原理图说明:
(图片转载https://blog.csdn.net/junwei0206/article/details/44734171)
6. 课堂重点:
设列表名为list1
del语句。 del list1[index] (删除索引号对应元素) del list1(删除整个列表)
pop() 。 list1.pop(index) 利用弹栈的原理,默认弹出列表最后一个元素。
还有一个:调换元素间的相对位置,可利用中间变量 。
- 从列表中获取元素:list1[index] index是索引数,相当于列表中元素的下标,下标默认从0开始!
- 从列表中删除元素:remove()。list1.remove(member) member是需要移除的对象名(对象必须存在于列表中,否则报错)
-
列表分片(slice)
一次性获得多个元素。list1[1:3](拷贝1~2顺序位的元素),得到原列表的切片复制结果,原列表不变
list1[1:3]:原列表list1中索引值1~3的元素组成新的列表list1[1:]:索引值从1开始到最后一个元素
list1[:]:原列表所有元素,特别
list2 = list1[:]完成列表的拷贝
list1[0:9:2]:索引从2开始到索引8,跨步2取数list1[::-1]:完成原列表的反转
参考答案:https://www.jianshu.com/p/cedfcd84b36b
作者:无罪的坏人
链接:https://www.jianshu.com/p/e7226241eed0
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。