2.1.4-Python组合数据类型.md

问答库

2.1.4 Python组合数据类型(问答库)

  1. 【单选题·易】组合数据类型将若干个值组合成一个单一的数据项。根据课程内容,组合数据类型主要包括: A. 整型、浮点型、复数、布尔值 B. 列表、元组、字典、集合 C. 字符串、字节、文件、模块 D. 操作码、操作数、指令、程序 答案:B 解析: 课程明确指出组合数据类型主要有列表、元组、字典、集合。A 是基本数据类型,C、D 不属于本小节所讲的组合数据类型。
  2. 【单选题·易】下列关于列表的说法正确的是: A. 列表无序且不可变 B. 列表有序且可变,元素可以是任意类型 C. 列表只能存放整数 D. 创建列表只能使用 list(),不能使用 [] 答案:B 解析: 列表是有序且可变的集合,元素可为数字、字符串甚至其他列表。创建列表有 [] 和 list() 两种方法。
  3. 【判断题·易】元组是一种有序且不可变的集合,一旦创建,元组的内容就无法更改。 答案:√ 解析: 课程指出元组有序、不可变,元素可为任意类型,但创建后不能增删元素或改变元素值,因而又称轻量级列表。
  4. 【判断题·易】执行 {2, 3, 3, 4} 得到的集合仍是 {2, 3, 3, 4},因为花括号会保留重复元素。 答案:× 解析: 集合自动去除重复元素。{2, 3, 3, 4} 的结果是 {2, 3, 4}。
  5. 【多选题·中】下列关于列表的说法正确的有: A. 可用方括号 [] 定义,元素之间用逗号分隔 B. list() 可由一个可迭代对象构造列表,如 list('abc') 得到 ['a', 'b', 'c'] C. 列表可以嵌套,如 [[4, 5], [6, 7]] D. 列表一旦创建就不能增加或删除元素 答案:ABC 解析: A、B、C 均与课程示例一致。D 描述的是元组的不可变特性,列表是可变的,可用 append、remove 等方法增删元素。
  6. 【单选题·中】运行下列程序,输出结果是什么?
myList = [10, 20, 30, 40, 50]
print(myList[1:4])
print(myList[:3])
print(myList[2:])
print(myList[::2])

A. [20, 30, 40] / [10, 20, 30] / [30, 40, 50] / [10, 30, 50] B. [10, 20, 30] / [10, 20, 30] / [20, 30, 40, 50] / [20, 40] C. [20, 30, 40, 50] / [10, 20, 30] / [30, 40, 50] / [10, 20, 30, 40, 50] D. [20, 30] / [10, 20, 30] / [30, 40] / [10, 30, 50] 答案:A 解析: 切片含 start、不含 stop。[1:4] 取下标 1、2、3;[:3] 从开头取到下标 2;[2:] 从下标 2 取到末尾;[::2] 步长为 2,得到 [10, 30, 50]。切片不修改原列表。

  1. 【单选题·中】运行下列程序,输出结果是什么?
a = [1, 2, 3]
a.append(4)
a.extend([5, 6])
a.insert(1, 0)
print(a)

A. [1, 2, 3, 4, [5, 6], 0] B. [1, 0, 2, 3, 4, 5, 6] C. [0, 1, 2, 3, 4, 5, 6] D. [1, 2, 3, 4, 5, 6, 0] 答案:B 解析: append(4) 在末尾添加一个元素,得到 [1, 2, 3, 4];extend([5, 6]) 把 5、6 拆开追加,得到 [1, 2, 3, 4, 5, 6];insert(1, 0) 在索引 1 处插入 0,原有元素后移,得到 [1, 0, 2, 3, 4, 5, 6]。若误把 extend 当成 append,会把整个列表当作一个元素,从而错选 A。

  1. 【判断题·中】对列表 a = [1, 2, 3, 2, 4] 执行 a.remove(2) 后,列表中两个 2 都会被删除。 答案:× 解析: remove() 只删除第一次出现的指定元素。执行后 a 变为 [1, 3, 2, 4],后面那个 2 仍然保留。若元素不存在,会引发 ValueError。
  2. 【多选题·中】字典的键必须是不可变类型,且每个键必须唯一。下列可以作为字典键的有: A. 字符串,如 "姓名" B. 整数,如 25 C. 元组,如 (1, 2) D. 列表,如 [1, 2] 答案:ABC 解析: 课程指出字典的键必须是不可变类型,例如字符串、整数或元组。列表是可变对象,不能作为字典的键。值则可以是任意类型。
  3. 【简答题·中】请从“是否有序、是否可变、如何创建、典型用途”四个方面,比较列表、元组、字典和集合。 答案:
    • 列表:有序、可变;用 [] 或 list() 创建;适合存放需要增删改的序列。
    • 元组:有序、不可变;用 () 或 tuple() 创建,单元素须写成 (1213,);适合存放不应被修改的数据,又称轻量级列表,成员方法只有 count 和 index。
    • 字典:按键值对存储且无序;用 {} 或 dict() 创建;键须不可变且唯一,适合按名字查找。
    • 集合:无序、元素不重复;用 {} 或 set() 创建并自动去重;常用于去除可迭代对象中的重复元素。 解析: 评分要点:四种类型都写到;有序/可变判断正确;创建方式与课程一致;指出单元素元组的逗号、空 {} 是字典、集合用于去重中的至少两点。
  4. 【单选题·难】运行下列程序,输出结果是什么?
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
squares = [x**2 for x in range(10)]
evens = [x for x in range(10) if x % 2 == 0]
print(a[1][2])
print(squares)
print(evens)

A. 6 / [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] / [0, 2, 4, 6, 8] B. 5 / [1, 4, 9, 16, 25, 36, 49, 64, 81] / [2, 4, 6, 8] C. 6 / [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] / [1, 3, 5, 7, 9] D. [4, 5, 6] / [0, 1, 4, 9] / [0, 2, 4, 6, 8, 10] 答案:A 解析: 二维列表用 a[行索引][列索引] 访问,a[1][2] 是第 2 行第 3 列的 6。range(10) 为 0 到 9,平方后含 0 和 81、不含 100。x % 2 == 0 筛出偶数,含 0 不含 10。

  1. 【简答题·难】要用字典统计字符串中每个字母出现的次数(不区分大小写)。请写出完整可运行的程序,统计 "Banana" 的结果,并说明为什么不能写成 dct[c] = dct[c] + 1。 答案: 程序如下:
s = "Banana"
dct = {}
for c in s.lower():
    dct[c] = dct.get(c, 0) + 1
print(dct)

运行后字典中 'b' 为 1、'a' 为 3、'n' 为 2(字典无序,打印顺序可不作要求)。不能写 dct[c] = dct[c] + 1,因为某字母第一次出现时键尚不存在,直接用 dct[c] 会引发 KeyError;get(c, 0) 在键不存在时返回 0,从而可以累加。 解析: 评分要点:①使用 s.lower();②用 get(c, 0) 累加;③代码可直接运行;④正确解释 KeyError;⑤结果中三个字母的次数正确。漏写 lower() 或未说明 get 的作用应扣分。

  1. 【单选题·难】运行下列程序,关于各对象类型的判断哪一项正确?
x = (1213,)
y = (1213)
z = {}
w = set()
print(type(x), type(y), type(z), type(w))

A. x 与 y 都是元组,z 与 w 都是集合 B. x 是元组,y 是整数,z 是字典,w 是集合 C. x 是元组,y 是元组,z 是字典,w 是字典 D. x 是列表,y 是整数,z 是集合,w 是集合 答案:B 解析: 单元素元组必须带逗号,(1213,) 才是元组,(1213) 只是整数 1213。空 {} 创建的是空字典,空集合必须用 set()。这是组合数据类型里最容易混淆的两处写法。

  1. 【多选题·中】下列操作会直接修改原列表对象的有: A. a.append(4) B. a.extend([4, 5]) C. a.sort() D. b = a[1:4] 答案:ABC 解析: append、extend、sort 都在原列表上操作:append/extend 增加元素,sort() 原地重排。切片返回一个新序列,不修改原始列表,因此 D 不正确。
下载此文件