>>> matrix = [[1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12]]
>>> Tmatrix = [[row[i] for row in matrix] for i in range(4)]
>>> Tmatrix
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
行列的转换不理解
row【i】的意思是每一行吗,怎么就变成列了
本帖最后由 编程追风梦 于 2022-8-31 11:09 编辑
刚才没说清楚,具体解释一下哈:
有列表如下:
- matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
复制代码
行换列后的结构如下
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
复制代码
怎么做到的呢?有三种方法
方法一:嵌套的列表推导式
- >>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
- >>> [[row[col] for row in matrix] for col in range(len(matrix[0]))]
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
- >>>
复制代码原理很简单:先循环列,在固定列上循环每一行
方法二:zip迭代 + map映射
咱们先分下类哈:
在python2中:
- >>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
- >>> map(list, zip(*matrix))
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
- >>>
复制代码- >>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
- >>> list(map(list, zip(*matrix)))
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
- >>>
复制代码原理也很清晰:先用zip并行送代每一个列表元素,然后再用map讲结果中的元组转成列表
顺便说一下,row【i】是每一行里面的元素
给我设个最佳答案吧,谢谢啦,不喜勿喷
|