问答题
2. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?
答:
append() 方法是将参数作为一个元素增加到列表的末尾。(即无论 append 的参数是什么类型,都将它作为一个元素添加到列表尾)
extend() 方法则是将参数作为一个列表去扩展列表的末尾。(而 extend 则是将参数原原本本的添加到列表尾,参数是什么,列表尾就加什么)
>>> name = ['F', 'i', 's', 'h']
>>> name.append('C')
>>> name
['F', 'i', 's', 'h', 'C']
>>> name.extend(['.', 'c'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c']
>>> name.append(['o', 'm'])
>>> name
['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]
1*. 请问 list1[0] 和 list1[0:1] 一样吗?
答:不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表。
2. 如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
答:代码如下:
>>> list1.insert(0, list1.pop())
1*. 请问如何将下边这个列表的’小甲鱼’修改为’小鱿鱼’?
list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
答:代码如下:
list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1[1][2][0] = '小鱿鱼'
4*. 请简单介绍一下列表的两个内置方法:copy() 和 clear()。
答:copy() 方法跟使用切片拷贝是一样的:
>>> list2 = list1.copy()
>>> list2
[1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
clear() 方法用于清空列表的元素,但要注意,清空完后列表仍然还在哦,只是变成一个空列表。
>>> list2.clear()
>>> list2
[]
5. 你有听说过列表推导式或列表解析吗?
列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如下:
[有关A的表达式 for A in B]
例如:
>>> list1 = [x**2 for x in range(10)]
>>> list1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
相当于:
list1 = []
for x in range(10):
list1.append(x**2)
问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
答:代码如下:
list1=[]
for x in range(10):
if x%2==0:
for y in range(10):
if y%2!=0:
list1.append((x,y))
print(list1)
6*. 活学活用:请使用列表推导式补充被涂掉的部分。
答:代码如下:
>>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
动动手
0. 将给定列表打印成下图的样式【请至少使用两种方法实现】
假设给定以下列表:
member = [‘小甲鱼’, 88, ‘黑夜’, 90, ‘迷途’, 85, ‘怡静’, 90, ‘秋舞斜阳’, 88]
答:方法一如下:
member=['小甲鱼',88,'黑夜',90,'迷途',85,'怡静',90,'秋舞斜阳',88]
for each in member:
if type(each)==int:
print(each)
else:
print(each,end=' ')
方法二如下(小甲鱼提供):
count = 0
length = len(member)
while count < length:
print(member[count], member[count+1]) #利用 print()
count += 2
方法三如下(小甲鱼提供):
for each in range(len(member)):
if each%2 == 0: #利用列表索引
print(member[each], member[each+1])
1. 观察以下代码,找出存在的Bug并修正。
num1 = input("请输入第一个整数:")
num2 = input("请输入第二个整数:")
if num1 < num2:
print("第一个数比第二个数小!")
if num1 > num2:
print("第一个数比第二个数大!")
if num1 == num2:
print("第一个数和第二个数一样大!")
答:这个程序的目的是比较两个数字的大小,但 input() 函数获取的是字符串类型,所以我们应该先将其转换为整数,再进行对比。
以下三种改法都是可以的:
第一种:
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))
if num1 < num2:
print("第一个数比第二个数小!")
if num1 > num2:
print("第一个数比第二个数大!")
if num1 == num2:
print("第一个数和第二个数一样大!")
第二种:
num1 = input("请输入第一个整数:")
num2 = input("请输入第二个整数:")
if int(num1) < int(num2):
print("第一个数比第二个数小!")
if int(num1) > int(num2):
print("第一个数比第二个数大!")
if int(num1) == int(num2):
print("第一个数和第二个数一样大!")
第三种:
num1 = input("请输入第一个整数:")
num2 = input("请输入第二个整数:")
num1 = int(num1)
num2 = int(num2)
if num1 < num2:
print("第一个数比第二个数小!")
if num1 > num2:
print("第一个数比第二个数大!")
if num1 == num2:
print("第一个数和第二个数一样大!")