第010-012讲:列表:一个打了激素的数组(2)——作业题

课后测试题(第010讲)

0. 列表都可以存放一些什么东西?

可以存放我们已经学习过的任何数据类型。

1. 向列表增加元素有哪些方法?

append()、extend() 、 insert()

2. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?

append() 方法是在列表末尾增加一个数据项
extend() 方法是在列表末尾增加一个数据集合

3. member.append([‘竹林小溪’, ‘Crazy迷恋’]) 和 member.extend([‘竹林小溪’, ‘Crazy迷恋’]) 实现的效果一样吗?

不一样。
member.append(['竹林小溪', 'Crazy迷恋']) 结果为:[......,['竹林小溪', 'Crazy迷恋']]
member.extend(['竹林小溪', 'Crazy迷恋'])结果为:[......,'竹林小溪', 'Crazy迷恋']

4. 有列表 name = [‘F’, ‘i’, ‘h’, ‘C’],如果小甲鱼想要在元素 ‘i’ 和 ‘h’ 之间插入元素 ‘s’,应该使用什么方法来插入?

name.insert(2, 's')

课后测试题(第011讲)

0. 下边的列表分片操作会打印什么内容?

>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[2:5]

[2,9,7]

1. 请问 list1[0] 和 list1[0:1] 一样吗?

不一样。list1[0]返回索引为0的元素,list1[0:1]返回包含索引为0元素的列表。
>>> list1=[1,3,2,9,7,8]

>>> list1[0]
1
>>> list1[0:1]
[1]

2. 如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?

list.reverse(),将列表反转

3. 有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?

索引为负的时候表示倒取数,list1[-3:-1]表示取倒数第三个和第二个数

4. 在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。

在普通的分片操作中,步长默认设置为1,表示逐个遍历元素。其实我们可以人为调整步长以达到不可告人的秘密。
>>> list1[0:6:2]
[1, 2, 7]

那么依你推测,关于步长的知识点还有哪些(很多知识点都是通用的)?

知识点:
步长不能为0,否则会报错
步长可以是负数,改变方向(从尾部开始向左走)

5. 课堂上小甲鱼说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?

不可以。list2=list1[:]  list3=list1 
当对list1做操作改变时,list3也会改变,但list2不会改变。Python的变量就像一个标签,就一个名字而已。
在为一个固定的东西指定另一个名字的做法,只是向同一个东西增加一个新的标签而已,如下图所示。


在这里插入图片描述

课后测试题(第012讲)

0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。

>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

如果不上机操作,你觉得会打印什么内容?

[1,2,3,4,5]。因为对old重新赋值后,new没有改变,还是指向原来的值

1. 请问如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?

list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1[1][2][0]="小鱿鱼"

2. 要对一个列表进行顺序排序,请问使用什么方法?

list.sort()

3. 要对一个列表进行逆序排序,请问使用什么方法?

list.reverse()

4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()

copy():数组拷贝;clear():清空数组。
>>> list1=[1,2,3,4,5]
>>> list1.copy()
[1, 2, 3, 4, 5]
>>> list1.clear()
>>> list1
[]

5. 你有听说过列表推导式或列表解析吗?

>>> [ i*i for i in range(10) ]你觉得会打印什么内容?
打印的内容:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:

[有关A的表达式 for A in B]

问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。

>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]

列表结果:
 [(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), 
 (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]

还原列表推导式:
	list1=[]
	for x in range(10):
	    for y in range(10):
	        if x%2 == 0 and  y%2 != 0:
	            list1.append((x,y))
	print(list1)

6. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分

在这里插入图片描述

list1=['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is nothing']
list2=['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
list3=[name + ':'+ slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
for each in list3:
    print(each)

动动手答案(第10讲)

**0. 自己动手试试看,并分析在这种情况下,向列表添加数据应当采用哪种方法比较好?
假设给定以下列表:
member = [‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘怡静’, ‘秋舞斜阳’]
要求将列表修改为:
member = [‘小甲鱼’, 88, ‘黑夜’, 90, ‘迷途’, 85, ‘怡静’, 90, ‘秋舞斜阳’, 88]
方法一:使用 insert() 和 append() 方法修改列表。
方法二:重新创建一个同名字的列表覆盖。

方法一:
member.insert(1,88)
member.insert(3,90)
member.insert(5,85)
member.insert(7,90)
member.append(88)
print(member)
方法二:
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

对于这种数组成员少的方法二比较合适

1. 利用 for 循环打印上边 member 列表中的每个内容

member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
for i in member:
    print(i)

2.上一题打印的样式不是很好,能不能修改一下代码打印成下图的样式呢?【请至少使用两种方法实现】

方法一:
length=len(member)
for i in range(length-1):
    if i%2 == 0:
        print(member[i],'\t',member[i+1])
        
方法二:
i=0
while i < length:
    print(member[i],'\t',member[i+1])
    i += 2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值