全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 41 道配套习题

数据结构基础专题

专题说明

本专题系统讲解Python四大核心数据结构的核心知识,包括列表(list)的增删改查与切片操作、元组(tuple)的不可变特性、字典(dict)的键值对操作与遍历、集合(set)的数学运算以及推导式的语法与用法。

学习目标

  1. 掌握列表的创建、元素操作、切片与排序方法
  2. 理解元组的不可变特性及其使用场景
  3. 熟练使用字典的键值对操作、遍历与常用方法
  4. 掌握集合的创建、集合运算(交集、并集、差集)
  5. 理解列表推导式、字典推导式和集合推导式

学习内容

  • 列表:创建、索引、切片、增删改查、排序与翻转、常用方法
  • 元组:创建、解包、与列表的区别、命名元组
  • 字典:创建、键值对操作、遍历(keys/values/items)、常用方法
  • 集合:创建、集合运算(交集/并集/差集/对称差集)、去重
  • 推导式:列表推导式、字典推导式、集合推导式

学习建议

  1. 列表和字典是最常用的数据结构,务必熟练掌握其常用方法
  2. 理解可变对象(list/dict/set)与不可变对象(tuple)的区别
  3. 切片操作是Python的精髓,注意步长和负索引的使用
  4. 推导式虽然简洁,但过度复杂的推导式会影响可读性

📝 发现内容有误?点击此处直接编辑

📝 配套习题(41 题)

1
判断题

列表是可变序列,可以通过索引修改元素值,但不能通过索引添加新元素。

A

B

2
单选题

要在列表末尾添加一个元素,应该使用哪个方法?

A

insert()

B

append()

C

add()

D

push()

3
单选题

以下哪个方法会返回新列表,而不是修改原列表?

A

append()

B

extend()

C

reverse()

D

sorted()

4
判断题

元组是不可变序列,一旦创建就不能修改其元素,也不能添加或删除元素。

A

B

5
单选题

以下哪种方式可以创建一个单元素元组?

A

(1)

B

(1,)

C

tuple(1)

D

[1]

6
单选题

执行a, b, c = (1, 2, 3)后,变量a、b、c的值分别是?

A

a=1, b=2, c=3

B

a=(1,2,3), b=None, c=None

C

a=1, b=2, c=(3,)

D

报错

7
判断题

序列解包要求左侧变量数量必须与右侧序列元素数量完全相等。

A

B

8
单选题

执行first, *rest = [1, 2, 3, 4, 5]后,rest的值是什么?

A

2

B

[2, 3, 4, 5]

C

(2, 3, 4, 5)

D

5

9
单选题

以下代码的输出结果是什么?

Python
def func(a, b, c):
    return a + b + c

params = {'a': 1, 'b': 2, 'c': 3}
result = func(**params)
print(result)
A

{'a': 1, 'b': 2, 'c': 3}

B

6

C

(1, 2, 3)

D

报错

10
多选题

以下哪些是正确的序列解包用法?

A

a, b, c = [1, 2, 3]

B

a, *b = (1, 2, 3)

C

**kwargs = {'a': 1}

D

for key, value in {'a': 1}.items():

E

a, b, c = range(3)

F

{**d1, **d2}合并两个字典

11
填空题

Python中交换两个变量a和b的值,最简洁的方式是使用序列解包:______, ______ = ______, ______。这种方式右侧会先打包成______,然后左侧进行解包赋值。使用*进行扩展解包时,如first, *middle, last = [1, 2, 3, 4, 5],middle的值是_________,是一个______类型。

12
判断题

字典的键必须是不可变类型,如字符串、数字、元组,但列表不能作为字典的键。

A

B

13
单选题

以下哪种方式可以创建一个空字典?

A

dict[]

B

{}

C

[]

D

dict{}

14
单选题

访问字典中不存在的键时,哪种方式不会引发异常?

A

d[key]

B

d.get(key)

C

d.pop(key)

D

d.keys()

15
多选题

以下哪些是字典的常用方法?

A

get()

B

keys()

C

values()

D

items()

E

append()

F

update()

16
填空题

字典d = {'a': 1, 'b': 2},使用______方法安全获取键'c'的值可以写成d.get('c', ______),不会引发异常。要添加新键值对{'c': 3},可以使用______方法:d.update({'c': 3})。遍历字典的键值对使用______方法:for k, v in d.______():。字典的键必须是______类型,列表不能作为键因为它是______类型。

17
判断题

集合会自动去除重复元素,创建集合时重复元素只保留一个。

A

B

18
单选题

以下哪种方式可以创建一个空集合?

A

{}

B

set()

C

[]

D

()

19
单选题

集合A = {1, 2, 3},集合B = {2, 3, 4},执行A & B的结果是什么?

A

{1, 2, 3, 4}

B

{2, 3}

C

{1, 4}

D

{1}

20
多选题

集合A = {1, 2, 3},集合B = {2, 3, 4},以下哪些运算结果是正确的?

A

A | B = {1, 2, 3, 4}

B

A - B = {1}

C

A ^ B = {1, 4}

D

A & B = {1}

E

A.union(B) = {1, 2, 3, 4}

F

A.difference(B) = {4}

21
填空题

集合A = {1, 2, 3},集合B = {2, 3, 4}。交集运算使用符号______,对应方法为____________(),结果是______。并集运算使用符号______,对应方法为______(),结果是____________。差集运算使用符号______,对应方法为__________(),A - B的结果是______。创建空集合必须使用______()函数,因为{}创建的是空______

22
判断题

列表推导式[x for x in range(10)]生成一个包含0到9的列表。

A

B

23
单选题

列表推导式[x for x in range(10) if x % 2 == 0]生成什么结果?

A

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

B

[0, 2, 4, 6, 8]

C

[1, 3, 5, 7, 9]

D

[2, 4, 6, 8]

24
单选题

嵌套列表推导式[[x for x in range(3)] for y in range(2)]生成什么结果?

A

[[0, 1, 2], [0, 1, 2]]

B

[[0, 0], [1, 1], [2, 2]]

C

[0, 1, 2, 0, 1, 2]

D

[[0, 1], [0, 1], [0, 1]]

25
多选题

关于列表推导式,以下说法正确的是?

A

列表推导式比等价的for循环更简洁

B

列表推导式可以包含if条件筛选

C

列表推导式可以嵌套使用

D

列表推导式总是比for循环更快

E

列表推导式可以包含多个for循环

F

列表推导式可以处理复杂的表达式

26
填空题

列表推导式的基本语法是:______表达式 for 变量 in __________]。要筛选偶数,添加条件:______ x % 2 == 0。要生成平方数,表达式写成______。嵌套列表推导式[[x for x in range(3)] for y in range(2)]生成______________________。扁平化嵌套列表使用多个for:______x for row in matrix ______ x in ______]。

27
判断题

字典推导式使用{键:值 for 变量 in 可迭代对象}语法,必须同时指定键和值的表达式。

A

B

28
单选题

字典推导式{x: x*2 for x in range(3)}生成什么结果?

A

{0: 0, 1: 2, 2: 4}

B

[0, 2, 4]

C

{0: 2, 1: 4, 2: 6}

D

{(0, 0), (1, 2), (2, 4)}

29
单选题

以下哪个字典推导式可以生成{1: 'odd', 3: 'odd', 5: 'odd'}

A

{x: 'odd' for x in range(6) if x % 2 == 1}

B

{x: 'odd' for x in range(6) if x % 2 == 0}

C

{x: 'odd' for x in [1, 3, 5]}

D

{x: 'odd' for x in range(6)}

30
多选题

以下哪些是有效的字典推导式?

A

{x: x**2 for x in range(5)}

B

{k: v for k, v in [('a', 1), ('b', 2)]}

C

{x: len(x) for x in ['a', 'ab', 'abc']}

D

{x for x in range(5)} # 这不是字典推导式

E

{k: v for k, v in d.items() if v > 0}

F

{i: chr(i) for i in range(65, 70)}

31
填空题

字典推导式的基本语法是:______键表达式: ______表达式 for 变量 in 可迭代对象}。反转字典键值使用:{______: ______ for k, v in original.items()}。从列表生成字典:{______: ______ for x in range(5)}生成{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}。带条件筛选:{x: x*2 for x in range(6) ______ x % 2 == 0}生成__________________

32
判断题

集合推导式{x for x in range(5)}生成集合{0, 1, 2, 3, 4},与列表推导式语法类似但使用花括号。

A

B

33
单选题

集合推导式{x % 3 for x in range(10)}生成什么结果?

A

{0, 1, 2}

B

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

C

{0, 1, 2, 3}

D

[0, 1, 2]

34
单选题

以下哪个表达式是集合推导式而非字典推导式?

A

{x: x for x in range(3)}

B

{x for x in range(3)}

C

{x: x**2 for x in range(3)}

D

{k: v for k, v in items}

35
多选题

关于三种推导式(列表、字典、集合),以下说法正确的是?

A

列表推导式使用方括号[]

B

字典推导式必须有键:值格式

C

集合推导式会自动去重

D

集合推导式使用花括号{}但无键值对

E

{}可以创建空集合

F

推导式都可以添加if条件

36
填空题

集合推导式使用______{},语法为______表达式 for 变量 in 可迭代对象},与字典推导式的区别是______键值对的冒号。集合推导式会自动______,例如{x % 3 for x in range(10)}的结果是_________。创建空集合不能用{},必须使用______()函数,因为{}创建的是空______

37
判断题

访问嵌套列表data = [[1, 2], [3, 4]]中第二个列表的第一个元素,应使用data[1][0]

A

B

38
单选题

嵌套字典data = {'user': {'name': '张三', 'age': 25}},访问用户年龄的正确方式是?

A

data['age']

B

data['user']['age']

C

data.user.age

D

data['user', 'age']

39
单选题

数据结构data = [{'name': 'a', 'scores': [80, 90]}, {'name': 'b', 'scores': [70, 85]}],访问第二个学生的第二个分数的正确方式是?

A

data[1]['scores'][1]

B

data['scores'][1]

C

data[1].scores[1]

D

data[1]['scores'][2]

40
多选题

对于嵌套数据结构data = {'students': [{'name': '张三', 'age': 20}, {'name': '李四', 'age': 22}]},以下哪些访问方式是正确的?

A

data['students'][0]['name']

B

data['students'][1]['age']

C

len(data['students'])

D

data['students']['name']

E

for s in data['students']: print(s['name'])

F

data.get('students', [])[0].get('name')

41
填空题

嵌套列表data = [[1, 2], [3, 4]],访问第一个列表的第二个元素用__________,结果是______。嵌套字典data = {'info': {'name': '张三'}},访问姓名用____________________。修改嵌套结构的值:data['info']['age'] = ______可以添加新字段。遍历嵌套列表使用双重循环:for ______ in data: for ______ in row。列表嵌套字典data = [{'id': 1}, {'id': 2}],访问第二个字典的id用_____________

← 上一个专题 性能优化专题
下一个专题 → 文件操作专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库