小甲鱼python零基础课后习题011列表:一个打了激素的数组02

一、测试题

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的列表有两个顺序:正序顺序和负序顺序。

列表元素顺序
正序012345
列表元素132978
负序-6-5-4-3-2-1

4. 小甲鱼参考答案

论坛参考答案:

  1. 之前提到的“简洁”分片操作在这里有效:
>>> list1[::2]
[1, 2, 7]
  1. 拷贝列表中,步长不能为0,要不就走不动了:
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1 = [ : : 0 ]
SyntaxError: invalid syntax
>>>
  1. 步长可以是负数改变方向(从尾部开始向左走):
>>> 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值