鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 小甲鱼

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

[复制链接]
发表于 5 天前 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
@FishC 下面哪个表达式的结果是 [[1], [1], [1]]?
A. [[1]] * 3
B. [[1] for _ in range(3)]
C. [1] * 3
D. [[1, 1, 1]]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
柳溪丶 发表于 2025-12-14 17:36
@FishC 下面哪个表达式的结果是 [, , ]?
A. [] * 3
...


正确的表达式是 AB,它们的结果都是 [[1], [1], [1]]。区别在于:

  • A. [[1]] * 3:使用乘法操作,会创建三个对同一个列表 [1] 的引用。这意味着如果修改其中一个子列表,其他子列表也会随之改变。
  • B. [[1] for _ in range(3)]:使用列表推导式,每次迭代都会创建一个新的列表 [1],因此三个子列表是独立的对象,互不影响。
  • C. [1] * 3:结果是 [1, 1, 1],不符合要求。
  • [b]D. [[1, 1, 1]]:结果是 [[1, 1, 1]],不符合要求。


如果题目要求每个子列表独立,则 B 是更合适的选择;如果只关心值相等,AB 都正确。请根据题目上下文判断。

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

使用道具 举报

发表于 前天 09:54 | 显示全部楼层
@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
回复 支持 反对

使用道具 举报

发表于 前天 09:55 | 显示全部楼层
@FishC 执行以下代码后,sum_value 的值是?

data = [[1, 2], [3, 4]]
sum_value = sum(data[0] + data[1])

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

使用道具 举报

发表于 前天 09:55 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 09:54
@FishC 访问二维列表 matrix = [,,] 的最后一个元素 6 ...

访问二维列表 matrix = [[1,2],[3,4],[5,6]] 的最后一个元素 6,正确的方式是?
A. matrix[3][2]
B. matrix[2][1]
C. matrix[-1][-1]
D. matrix[6]


正确答案是 B 和 C

解释:
二维列表 matrix 的结构如下:

  1. matrix[0] = [1, 2]
  2. matrix[1] = [3, 4]
  3. matrix[2] = [5, 6]
复制代码


最后一个元素 6 位于子列表 matrix[2] 的第二个位置(索引从 0 开始,所以索引为 1)。

matrix[2][1] 直接访问该元素,因此选项 B 正确。

在 Python 中,负索引表示从末尾开始计数:matrix[-1] 是最后一个子列表 [5, 6][-1] 是该子列表的最后一个元素 6,因此选项 C 也正确。

选项 A:matrix[3][2] 索引超出范围,因为 matrix 只有 3 个子列表(索引 0、1、2),且每个子列表只有 2 个元素(索引 0、1)。

选项 D:matrix[6] 索引超出范围,因为 matrix 只有 3 个元素。

所以,B 和 C 都是访问最后一个元素 6 的正确方式。

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

使用道具 举报

发表于 前天 09:55 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 09:55
@FishC 执行以下代码后,sum_value 的值是?

data  ...


执行代码后,sum_value 的值为 10。

解释:
  • data[0] 是列表 [1, 2]
  • data[1] 是列表 [3, 4]
  • data[0] + data[1] 将两个列表连接,得到 [1, 2, 3, 4]
  • sum([1, 2, 3, 4]) 计算总和为 10。


因此,正确答案是 C. 10

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

使用道具 举报

发表于 前天 09:55 | 显示全部楼层
@FishC 关于列表乘法 [1, [2, 3]] * 2 的结果,下面哪个说法正确?
A. 结果是 [1, [2, 3], 1, [2, 3]]
B. 结果中两个 [2, 3] 是同一个对象
C. 修改结果中第一个 [2, 3] 不会影响第二个
D. 会产生深拷贝
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 09:56 | 显示全部楼层
@FishC 执行以下代码后,table[1][1] 的值是?

table = [[i*j for j in range(1, 4)] for i in range(1, 4)]

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

使用道具 举报

发表于 前天 09:56 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 09:55
@FishC 关于列表乘法 [1, ] * 2 的结果,下面哪个说法 ...


关于列表乘法 [1, [2, 3]] * 2 的结果,正确的说法是 A 和 B,C 和 D 错误。

具体解释如下:


  1. # 示例代码
  2. original = [1, [2, 3]]
  3. result = original * 2

  4. print("结果:", result)  # 输出: [1, [2, 3], 1, [2, 3]]
  5. print("两个 [2, 3] 是同一个对象吗?", result[1] is result[3])  # 输出: True

  6. # 修改第一个 [2, 3]
  7. result[1].append(4)
  8. print("修改后:", result)  # 输出: [1, [2, 3, 4], 1, [2, 3, 4]]
复制代码


- 选项 A:结果是 [1, [2, 3], 1, [2, 3]],正确。
- 选项 B:结果中两个 [2, 3] 是同一个对象,正确(列表乘法是浅拷贝,复制引用)。
- 选项 C:修改结果中第一个 [2, 3] 不会影响第二个,错误(由于是同一对象,修改会同时影响)。
- 选项 D:会产生深拷贝,错误(列表乘法不会创建深层副本)。

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

使用道具 举报

发表于 前天 09:57 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 09:56
@FishC 执行以下代码后,table 的值是?

table =
...


首先,您提供的代码 `table = [ for i in range(1, 4)]` 存在语法错误,因为列表推导式缺少表达式。假设正确代码是常见的二维列表推导式,例如构建一个乘法表:`table = [[i * j for j in range(1, 4)] for i in range(1, 4)]`。

那么,代码执行后,`table` 的内容如下:


  1. table = [[1, 2, 3],
  2.          [2, 4, 6],
  3.          [3, 6, 9]]
复制代码


在 Python 中,列表索引从 0 开始,因此 `table[1][1]` 表示第二行第二列的元素,即 `4`。

所以,`table[1][1]` 的值是 4,对应选项 C。

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

使用道具 举报

发表于 前天 09:58 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 09:55
@FishC 关于列表乘法 [1, ] * 2 的结果,下面哪个说法 ...

关于列表乘法 [1, [2, 3]] * 2 的结果,下面哪个说法正确?
A. 结果是 [1, [2, 3], 1, [2, 3]]
B. 结果中两个 [2, 3] 是同一个对象
C. 修改结果中第一个 [2, 3] 不会影响第二个
D. 会产生深拷贝


在 Python 中,列表乘法执行的是浅拷贝。对于 [1, [2, 3]] * 2:
- 新列表会重复原列表的元素两次,因此结构上得到 [1, [2, 3], 1, [2, 3]]。
- 但对于可变元素(如内部列表 [2, 3]),复制的是引用而非独立对象,所以结果中的两个 [2, 3] 实际指向同一个列表对象。
- 因此,修改其中一个内部列表(例如添加元素),另一个也会同步变化。
- 列表乘法不会进行深拷贝,仅浅层复制。

验证代码:

  1. original = [1, [2, 3]]
  2. result = original * 2
  3. print("结果:", result)  # 输出 [1, [2, 3], 1, [2, 3]]
  4. print("两个 [2, 3] 的 id 是否相同?", id(result[1]) == id(result[3]))  # 输出 True
  5. result[1].append(4)
  6. print("修改后:", result)  # 输出 [1, [2, 3, 4], 1, [2, 3, 4]]
复制代码


选项分析:
- A 正确:结果的结构确实如此。
- B 正确:两个 [2, 3] 是同一个对象(引用相同)。
- C 错误:修改第一个 [2, 3] 会影响第二个,因为它们是同一对象。
- D 错误:列表乘法是浅拷贝,不是深拷贝。

因此,正确的说法是 A 和 B。

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

使用道具 举报

发表于 前天 10:06 | 显示全部楼层
@FishC 执行以下代码后,输出是什么?

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

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

使用道具 举报

发表于 前天 10:06 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 10:06
@FishC 执行以下代码后,输出是什么?

colors =  * ...


执行代码后,输出为 C. 2

解释:
1. colors = ['red'] * 3 会创建一个包含 3 个 'red' 的列表:['red', 'red', 'red']。
2. colors[1] = 'blue' 将索引 1 的元素改为 'blue',列表变为 ['red', 'blue', 'red']。
3. colors.count('red') 统计列表中 'red' 的出现次数,结果为 2。

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

使用道具 举报

发表于 前天 10:07 | 显示全部楼层
@FishC 执行以下代码后,board 的值是?

row = [0, 0]
board = [row, row]
board[0][0] = 1

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

使用道具 举报

发表于 前天 10:07 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 10:07
@FishC 执行以下代码后,board 的值是?

row =
b ...


执行代码后,board 的值是 [[1, 0], [1, 0]],对应选项 B。

解释:
- row = [0, 0] 创建了一个包含两个 0 的列表。
- board = [row, row] 创建了一个列表,其中两个元素都指向同一个 row 列表。
- 当执行 board[0][0] = 1 时,修改了 row 列表的第一个元素,由于 board[0]board[1] 是同一个列表的引用,因此两个子列表都会变成 [1, 0]。

所以 board 最终为 [[1, 0], [1, 0]]。

答案:B

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

使用道具 举报

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

使用道具 举报

发表于 前天 10:09 | 显示全部楼层
LZzz_Snail 发表于 2025-12-17 10:08
@FishC 下面哪个表达式的结果是 [, , ]?
A. [] * 3
...


正确答案是 A 和 B,它们都会得到 [[1], [1], [1]],但内部结构有重要区别。


  1. # 选项 A: [[1]] * 3
  2. a = [[1]] * 3
  3. print(a)  # 输出 [[1], [1], [1]]

  4. # 选项 B: [[1] for _ in range(3)]
  5. b = [[1] for _ in range(3)]
  6. print(b)  # 输出 [[1], [1], [1]]
复制代码


选项 A 使用乘法复制,三个子列表是同一个对象的引用。如果修改其中一个子列表(例如 a[0].append(2)),所有子列表都会改变。

选项 B 使用列表推导式,每次迭代创建新的子列表,三个子列表是独立的对象。修改其中一个不会影响其他。

选项 C [1] * 3 的结果是 [1, 1, 1],不是嵌套列表。

选项 D [[1, 1, 1]] 的结果是 [[1, 1, 1]],只有一个子列表。

因此,如果只关心输出值,A 和 B 都正确;但如果需要独立子列表,B 更合适。

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

使用道具 举报

发表于 前天 12:03 | 显示全部楼层

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 23:28 | 显示全部楼层
@FishC 下面哪种方式能正确地将二维列表的行和列互换(转置)?
A. [[row[i] for row in matrix] for i in range(len(matrix[0]))]
B. matrix[::-1]
C. matrix * -1
D. [matrix[i][j] for i in range(len(matrix)) for j in range(len(matrix[0]))]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 23:30 | 显示全部楼层
dongqing1 发表于 2025-12-18 23:28
@FishC 下面哪种方式能正确地将二维列表的行和列互换 ...


根据分析,提供的选项中没有一个能正确实现二维列表的转置。下面简要解释每个选项的问题:

  • 选项 A:[[row for row in matrix] for i in range(len(matrix[0]))]:内层循环未使用索引 i,结果会重复原始矩阵的行,而非转置。
  • 选项 B:matrix[::-1]:仅反转行的顺序,不涉及列交换。
  • 选项 C:matrix * -1:列表乘以负数会返回空列表或引发错误,无法转置。
  • 选项 D:[matrix[j] for i in range(len(matrix)) for j in range(len(matrix[0]))]:索引使用错误,可能导致越界或生成错误结构。


正确的转置方法(使用列表推导式)如下:


  1. matrix = [[1, 2, 3], [4, 5, 6]]  # 示例二维列表
  2. transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
  3. print(transposed)  # 输出:[[1, 4], [2, 5], [3, 6]]
复制代码


或者使用 zip 函数:


  1. transposed = list(map(list, zip(*matrix)))
复制代码


建议检查题目选项是否有误,或使用上述正确方法实现转置。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-19 09:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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