鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[快问快答] 第022讲:列表(IV)

[复制链接]
发表于 2026-3-23 15:44:41 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
@FishC 创建一个包含 5 个空列表的列表,哪种方法最安全?
A. [[]] * 5
B. [[] for i in range(5)]
C. list([[]] * 5)
D. [].extend([[] * 5])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-23 15:45:05 | 显示全部楼层
13750868166 发表于 2026-03-23 15:44
@FishC 创建一个包含 5 个空列表的列表,哪种方法最安 ...


正确答案是 B. [[] for i in range(5)]


详细解释:

A 和 C 的问题是它们创建的是对 同一个空列表的引用,修改其中任何一个子列表,其他所有子列表都会跟着改变,这通常不是想要的效果。

选项 D 语法错误,.extend() 方法返回 None,不会生成新列表,因此无法创建出包含5个空列表的列表。

只有选项 B 使用列表推导式,在循环中 每次都会创建一个新的空列表,这5个子列表是完全独立的对象,互不影响,所以最安全、最符合预期。




  1. # 错误示例:A 和 C 的方法
  2. list_a = [[]] * 5
  3. print("初始A:", list_a)  # [[], [], [], [], []]
  4. list_a[0].append(1)
  5. print("修改后A:", list_a)  # [[1], [1], [1], [1], [1]] 所有子列表都被改变

  6. # 正确示例:B 的方法
  7. list_b = [[] for i in range(5)]
  8. print("初始B:", list_b)  # [[], [], [], [], []]
  9. list_b[0].append(1)
  10. print("修改后B:", list_b)  # [[1], [], [], [], []] 只有第一个子列表被改变

  11. # 错误示例:D 的方法
  12. list_d = [].extend([[] * 5])
  13. print("D的结果:", list_d)  # 输出 None,不是我们想要的列表
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-23 15:51:24 | 显示全部楼层
@FishC 执行以下代码后,结果是 True 还是 False?

a = ['Python'] * 2
b = ['Python', 'Python']
result = a == b and a is not b

A. True
B. False
C. 报错
D. None
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-23 15:52:09 | 显示全部楼层
13750868166 发表于 2026-03-23 15:51
@FishC 执行以下代码后,结果是 True 还是 False?

...

  1. a = ['Python'] * 2
  2. b = ['Python', 'Python']
  3. result = a == b and a is not b
复制代码


执行以上代码,a == b 比较列表的值,由于两个列表都包含两个字符串 'Python',所以值为 True。a is not b 检查是否不是同一个对象,由于 a 和 b 是通过不同方式创建的两个不同列表对象,所以也为 True。因此 result 为 True。

答案:A. True

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-23 20:23:36 | 显示全部楼层
@FishC 下面哪个表达式的结果是 [[1], [1], [1]]?
A. [[1]] * 3
B. [[1] for _ in range(3)]
C. [1] * 3
D. [[1, 1, 1]]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-23 20:24:56 | 显示全部楼层
学python的Peter 发表于 2026-03-23 20:23
@FishC 下面哪个表达式的结果是 [, , ]?
A. [] * 3
...


答案:B

分析如下:

  • 选项 A:[[1]] * 3
      该表达式会创建一个包含三个相同引用的列表,即三个内部列表指向同一个 [1] 对象。虽然输出结果在值上为 [[1], [1], [1]],但修改其中一个内部列表会影响所有。
  • 选项 B:[[1] for _ in range(3)]
      使用列表推导式,每次迭代都会创建一个新的 [1] 列表,因此三个内部列表是独立的,输出结果为 [[1], [1], [1]]
  • 选项 C:[1] * 3
      该表达式生成一个平铺列表 [1, 1, 1],不符合目标结构。
  • 选项 D:[[1, 1, 1]]
      该表达式生成一个包含单个列表(其中有三个元素)的列表 [[1, 1, 1]],不符合目标结构。


因此,选项 B 是符合要求且更安全的选择。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-27 09:19:42 | 显示全部楼层
@FishC 访问二维列表 matrix = [[1,2],[3,4],[5,6]] 的最后一个元素 6,正确的方式是?
A. matrix[3][2]
B. matrix[2][1]
C. matrix[-1][-1]
D. matrix[6]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-27 09:20:20 | 显示全部楼层
wxblsh 发表于 2026-03-27 09:19
@FishC 访问二维列表 matrix = [,,] 的最后一个元素 6 ...


正确的选项是 BC

解释:
- 二维列表 matrix 的结构为:三个子列表,每个子列表包含两个元素。
  - 第一个子列表:[1, 2],索引 0
  - 第二个子列表:[3, 4],索引 1
  - 第三个子列表:[5, 6],索引 2
- 要访问最后一个元素 6,需要先定位到第三个子列表(索引 2),再访问该子列表的第二个元素(索引 1)或使用负索引从末尾访问。

选项分析:
- A: matrix[3][2] — 错误,因为 matrix 只有三个子列表(索引 0-2),且子列表只有两个元素(索引 0-1),索引超出范围。
- B: matrix[2][1] — 正确,访问第三个子列表的第二个元素,即 6。
- C: matrix[-1][-1] — 正确,使用负索引:matrix[-1] 获取最后一个子列表 [5, 6][-1] 获取该子列表的最后一个元素 6。
- D: matrix[6] — 错误,matrix 只有三个元素,索引 6 超出范围。

代码验证:


  1. matrix = [[1,2],[3,4],[5,6]]
  2. print(matrix[2][1])   # 输出 6
  3. print(matrix[-1][-1]) # 输出 6
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-4-24 14:53:32 | 显示全部楼层
@FishC 执行以下代码后,输出是什么?

colors = ['red'] * 3
colors[1] = 'blue'
print(colors.count('red'))

A. 0
B. 1
C. 2
D. 3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-4-24 14:53:40 | 显示全部楼层
EazyLan 发表于 2026-04-24 14:53
@FishC 执行以下代码后,输出是什么?

colors =  * ...


答案是:C. 2

  1. colors = ['red'] * 3  # 创建 ['red', 'red', 'red']
  2. colors[1] = 'blue'       # 修改为 ['red', 'blue', 'red']
  3. print(colors.count('red'))  # 统计 'red' 出现次数,结果为 2
复制代码


列表乘法会重复元素,但不复制嵌套对象(这里只是字符串,没问题)。修改索引1后,剩余两个'red'依然存在,因此count('red')返回2。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-4-24 14:56:10 | 显示全部楼层
@FishC 访问二维列表 matrix = [[1,2],[3,4],[5,6]] 的最后一个元素 6,正确的方式是?
A. matrix[3][2]
B. matrix[2][1]
C. matrix[-1][-1]
D. matrix[6]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-4-24 14:56:19 | 显示全部楼层
EazyLan 发表于 2026-04-24 14:56
@FishC 访问二维列表 matrix = [,,] 的最后一个元素 6 ...

鱼油你好!这是一个非常经典的二维列表索引问题。  

对于 matrix = [[1,2],[3,4],[5,6]]:  
- 整个列表有 3 个元素(子列表),索引从 0 开始,所以最后一个子列表的索引是 2。  
- 每个子列表有 2 个元素,最后一个元素的索引是 1。  

因此,访问最后一个元素 6 的方式有:  
      
  • B. matrix[2][1] – 正索引,直接定位到第 3 个子列表的第 2 个元素。  
  • C. matrix[-1][-1] – 负索引,-1 表示最后一个子列表,-1 表示该子列表的最后一个元素。  
  

选项 A 和 D 都会导致索引越界错误:  
- A 的 matrix[3] 超出范围(最大索引为 2)。  
- D 的 matrix[6] 更是直接越界。  

所以,正确选项是 B 和 C。希望这个解释能帮到你!


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-5-27 04:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表