这个主题考什么
- 不靠猜,正确读写索引和切片。
- 分清会修改原列表的方法和返回新列表的方法。
- 知道什么时候用循环,什么时候用内置函数。
常见错误
- 用 = 复制列表,两个变量其实指向同一个列表。
- 一边遍历一边删除元素,应该遍历副本。
- 以为 .sort() 会返回排序后的列表;它返回 None。
样题
从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。
-
1. 小明从奶茶订单列表 orders = ["张三", "李四", "王五"] 取最后一单,orders[-1] 是?
显示答案
答案
B. 王五解析: 负索引从末尾往前数,-1 是最后一个元素,-2 是它前面那个。返回的是 Carol 而不是数字 -1,只有越界才报 IndexError。
-
2. 下列哪个值不能作为字典的键?
显示答案
答案
C. [1, 2]解析: 键必须可哈希,列表可变、哈希会变,所以不能当键;元组、字符串、整数都可以。用列表做键会抛 TypeError。
-
3. 🧋 小明往订单列表加新单,append 和 extend 的区别?
显示答案
答案
B. append加一个元素,extend加多个元素解析: append 接收单个对象,追加列表会形成嵌套;extend 遍历参数并逐个加入。看长度增长多少就能判断用了哪个。
-
4. 执行 b = a 后,a 和 b 是什么关系?
显示答案
答案
B. 指向同一对象解析: 赋值只是给同一个对象再绑一个名字,从不复制。需要两个独立列表时用 copy() 或切片,否则改一个另一个也变。
-
5. 小明给重复下单的顾客去重:`list(set(['milk','tea','milk']))` 去重后有 ___ 个元素(填数字)
显示答案
答案
2解析: set 对每个不同字符串只留一份,milk 和 tea 保留,长度为 2。顺序不保证,别拿它当排序结果用,先去重再排序才稳定。
-
6. 🧋 小明往订单列表加新单,在列表末尾添加元素用 ___ 方法
显示答案
答案
append解析: append 是只收一个参数、在末尾增长列表的方法。insert 要下标,extend 要可迭代对象,记不住时先想参数个数。
-
7. 复制列表的常用方法名是什么?
显示答案
答案
copy解析: list.copy() 返回浅拷贝,是可读版的 a[:]。嵌套结构要改用 copy.deepcopy,否则内层仍然共享,复制方式决定改动传播的范围。
-
8. 这个切片打印什么?
orders = ["Alice", "Bob", "Carol"] print(orders[1:])显示答案
答案
['Bob', 'Carol']解析: 从下标 1 切到末尾,保留 Bob 和 Carol,丢掉第一个元素。起始下标包含在内,省略终止表示一直到结束。
-
9. `annotate([])` 返回什么?
def annotate(garden): if not garden: return [] verify_board(garden) row_len = len(garden[0]) col_len = len(garden) board = [list(row) for row in garden] for index1 in range(col_len): for index2 in range(row_len): if board[index1][index2] != ' ': continue low = max(index2 - 1, 0) high = min(index2 + 2, row_len + 2) counts = garden[index1][low:high].count('*') if index1 > 0: counts += garden[index1 - 1][low:high].count('*') if index1 < col_len - 1: counts += garden[index1 + 1][low:high].count('*') if counts == 0: continue board[index1][index2] = str(counts) return [''.join(row) for row in board] def verify_board(garden): # Rows with different lengths row_len = len(garden[0]) if not all(len(row) == row_len for row in garden): raise ValueError('The board is invalid with current input.') # Unknown character in board character_set = set() for row in garden: character_set.update(row) if character_set - set(' *'): raise ValueError('The board is invalid with current input.') print(annotate([]))显示答案
答案
[]解析: 守卫在 verify_board 之前就返回 [],空花园根本进不了计数循环。没有格子可标注,结果自然是空列表。
-
10. `spiral_matrix(5)` 返回什么?
def spiral_matrix(size): matrix = [[0]*size for row in range(size)] idx = 0 jdx = -1 element = 1 digital = [0, 1, 0, -1] disco = [1, 0, -1, 0] for edx in range(2*size - 1): for _ in range((2*size - edx) // 2): idx += digital[edx % 4] jdx += disco[edx % 4] matrix[idx][jdx] = element element += 1 return matrix print(spiral_matrix(5))显示答案
答案
[[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]解析: 5×5 螺旋是 16 格的外圈(1 到 16)包住 3×3 螺旋(17 到 25),因此中心格最终是 25。
常见问题
完整题库里有多少道列表题?
完整题库中与列表课程对应的题目超过 80 道,包含选择题、填空题和输出预测题。
什么时候用列表,什么时候用元组?
集合需要变化时用列表;形状和顺序固定,或需要可哈希的键时用元组。
继续保持练习节奏。
完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。