第四章 列表练习题及其答案
1、什么是[]?
答:空的列表值,它是一个列表,不包含任何列表项。这类似于‘‘是空的字符串值。
2、如何将‘hello‘赋值给列表的第三个值,而列表保存在名为spam的变量中?(假设变量包含[2, 4, 6, 8, 10])
答:spam[2] = ‘hello‘(注意列表中的第3个值下标是2,因为第一个值下标是0。)
对接下来的3个问题,假定spam包含列表[‘a‘, ‘b‘, ‘c‘, ‘d‘]
3、spam[int(‘3‘*2)/11]求值为多少?
答:‘d‘(注意‘3‘*2是字符串‘33‘,它被传入int(),然后再除以11。这最终求值为3.在使用值的地方,都可以使用表达式)。>>> spam=[‘a‘, ‘b‘, ‘c‘, ‘d‘]>>> spam[int(‘3‘*2)//11]‘d‘
4、spam[-1]求值为多少?
答:‘d‘(负数下标从末尾倒数)。
5、spam[:2]求值为多少?
答:>>>spam
[‘a‘, ‘b‘, ‘c‘, ‘d‘]>>> spam[:2]
[‘a‘, ‘b‘]
对接下来的3个问题。假定bacon包含列表[3.14,‘cat‘, 11, ‘cat‘, True]
6、bacon.index(‘cat‘)求值为多少?
答:>>> bacon = [3.14, ‘cat‘, 11, ‘cat‘, True]>>> bacon.index(‘cat‘)1
>>>
7、bacon.append(99)让bacon中的列表值变成什么样?
>>> bacon = [3.14, ‘cat‘, 11, ‘cat‘, True]>>> bacon.append(99)>>>bacon
[3.14, ‘cat‘, 11, ‘cat‘, True, 99]>>>
8、bacon.remove(‘cat‘)让bacon中的列表值变成什么样?
答:>>>bacon
[3.14, ‘cat‘, 11, ‘cat‘, True, 99]>>> bacon.remove(‘cat‘)>>>bacon
[3.14, 11, ‘cat‘, True, 99]>>>
9、列表连接和复制的操作符是什么?
答:列表连接的操作符是+,复制的操作符是*(这和字符串一样)。
10、append()和insert()列表方法之间的区别是什么?
答:append()只会将值添加在列表的末尾,而insert()可以将值添加在列表的任何位置。
11、从列表中删除值有哪两种方法?
答:del语句和remove()列表方法是从列表中删除值得两种方法。
12、请说出列表值和字符串的几点相似之处。
答:列表和字符串都可以传入len(),都有下标和切片,用于for循环,连接或复制,并与in和not in操作符一起使用。
13、列表和元组之间的区别是什么?
答:列表是可以修改的,它们可以添加值、删除值和修改值。元组是不可修改的,它们根本不能改变。而且,元组使用的是括号,而列表使用的是方括号[]。
14、如果元组中只有一个整数值42,如何输入该元组?
答:spam=(42,) 末尾的逗号是必须的。
15、如何从列表值得到元组形式?如何从元组值得到列表形式?
答:分别使用tuple()和list()函数。
16、"包含"列表的变量,实际上并未真正地直接包含列表。它们包含的是什么?
答:它们包含对列表值得引用。
17、copy.copy()和copy.deepcopy()之间的区别是什么?
答:copy.copy()函数将浅拷贝列表,而copy.deepcopy()函数将深拷贝列表。也就是说,只有copy.deepcopy()会复制列表内的所有列表。
4.10 实践项目
作为实践,编程完成下列任务。
4.10.1 逗号代码
假定有下面这样的列表:
spam = [‘apples‘, ‘bananans‘, ‘tofu‘, ‘cats‘]
编写一个函数,它以一个列表值作为参数,返回一个字符串。该字符串包含所有表项,表项之间以逗号和空格分隔,
并在最后一个表项之前插入and。例如,将前面的spam列表传递给函数,将返回‘apples, bananas, tofu, and cats‘。
但你的函数应该能够处理传递给它的任何列表。
"""4.10 实践项目
作为实践,编程完成下列任务。
4.10.1 逗号代码
假定有下面这样的列表:
spam = [‘apples‘, ‘bananans‘, ‘tofu‘, ‘cats‘]
编写一个函数,它以一个列表值作为参数,返回一个字符串。该字符串包含所有表项,表项之间以逗号和空格分隔,
并在最后一个表项之前插入and。例如,将前面的spam列表传递给函数,将返回‘apples, bananas, tofu, and cats‘。"""spam= [‘apples‘, ‘bananans‘, ‘tofu‘, ‘cats‘]deflist_str(lst):return ‘,‘.join(lst[:-1]+[‘and‘+lst[-1]])
a=list_str(spam)print(a)
4.10.2 字符图网络
假定有一个列表的列表,内层列表的每个值都是包含一个字符的字符串,像这样:
grid = [[‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘, ‘.‘],
[‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘]]
你可以认为grid[x][y]是一副"图"在x,y坐标处的字符,该图由文本字符组成。原点(0,0)在左上角,向右x坐标增加,
向下y坐标增加。
复制前面的网格值,编写代码用它打印出图像。
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
提示: 你需要使用循环嵌套循环,打印出grid[0][0],然后grid[1][0],然后grid[2][0],以此类推,
直到grid[8][0]。这就完成第一行,所以接下来打印换行。然后程序将打印出grid[0][1], 然后grid[1][1],然后grid[2][1],
以此类推。程序最后打印出grid[8][5]。
而且,如果你不希望在每次print()调用后都自动打印换行,记得向print()传递end关键字参数。
#!/usr/bin/env python3#-*- coding:utf-8 -*-#Author: davie
"""4.10.2 字符图网络
假定有一个列表的列表,内层列表的每个值都是包含一个字符的字符串,像这样:
grid = [[‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘, ‘.‘],
[‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘]]
你可以认为grid[x][y]是一副"图"在x,y坐标处的字符,该图由文本字符组成。原点(0,0)在左上角,向右x坐标增加,
向下y坐标增加。
复制前面的网格值,编写代码用它打印出图像。
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
提示: 你需要使用循环嵌套循环,打印出grid[0][0],然后grid[1][0],然后grid[2][0],以此类推,
直到grid[8][0]。这就完成第一行,所以接下来打印换行。然后程序将打印出grid[0][1], 然后grid[1][1],然后grid[2][1],
以此类推。程序最后打印出grid[8][5]。
而且,如果你不希望在每次print()调用后都自动打印换行,记得向print()传递end关键字参数。"""grid= [[‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘],
[‘O‘, ‘O‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘],
[‘.‘, ‘O‘, ‘O‘, ‘.‘, ‘.‘, ‘.‘],
[‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘, ‘.‘]]
list_len=len(grid)
list_col=len(grid[0])for i inrange(list_col):for j inrange(list_len):print(grid[j][i],end=‘‘)print()