|
|
下面哪种方式能正确地将二维列表的行和列互换(转置)?
这些选项中没有一个能完全正确地实现二维列表的转置。下面分析每个选项:
A. [[row for row in matrix] for i in range(len(matrix[0]))]
这个选项不会转置矩阵。它实际上会创建一个列表,其中包含 len(matrix[0]) 个原始 matrix 的副本。例如:
- matrix = [[1, 2, 3], [4, 5, 6]]
- result = [[row for row in matrix] for i in range(len(matrix[0]))]
- print(result) # 输出:[[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]]
复制代码
B. matrix[::-1]
这只是将矩阵的行顺序反转,而不是转置。例如:
- matrix = [[1, 2, 3], [4, 5, 6]]
- print(matrix[::-1]) # 输出:[[4, 5, 6], [1, 2, 3]]
复制代码
C. matrix * -1
在 Python 中,列表乘法不支持负数,这会导致得到一个空列表。例如:
- matrix = [[1, 2, 3], [4, 5, 6]]
- print(matrix * -1) # 输出:[]
复制代码
D. [matrix[j] for i in range(len(matrix)) for j in range(len(matrix[0]))]
这个选项存在索引错误。因为 j 的范围是列数,但 matrix[j] 需要 j 小于行数。当列数大于行数时,会引发 IndexError。例如:
- matrix = [[1, 2, 3], [4, 5, 6]]
- # 尝试执行会报错:IndexError: list index out of range
复制代码
正确的转置方法:
要实现二维列表的转置,可以使用以下方法之一:
1. 使用嵌套列表推导式:
- matrix = [[1, 2, 3], [4, 5, 6]]
- transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
- print(transposed) # 输出:[[1, 4], [2, 5], [3, 6]]
复制代码
2. 使用 zip(*matrix):
- matrix = [[1, 2, 3], [4, 5, 6]]
- transposed = list(map(list, zip(*matrix)))
- print(transposed) # 输出:[[1, 4], [2, 5], [3, 6]]
复制代码
因此,如果你必须从选项中选择,那么选项 A 最接近,但需要修正为 [[row[i] for row in matrix] for i in range(len(matrix[0]))] 才能正确转置。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|