有列表如下:1matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
转置(行列互换)后的结果如下:1[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
方法一:嵌套的列表推导式
|
|
原理很简单:先循环列,在固定列上循环每一行。
方法二:zip迭代 + map映射
在Python2中:12341, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] matrix = [[ map(list, zip(*matrix))[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]>>>
如在Python3下,map函数返回的是迭代器不是列表,将结果用list函数构造成列表:12341, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] matrix = [[ list(map(list, zip(*matrix)))[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]>>>
原理也很清晰:先用zip并行迭代每一个列表元素,然后再用map将结果中的元组转成列表。