You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3中无需依赖NumPy库,实现二维列表转置并返回列表形式的更优方法是什么?

Python矩阵转置:更简洁的非NumPy实现

嘿,你提到的这个问题其实挺常见的,确实有更Pythonic而且简洁的写法,不用依赖NumPy~

你之前的list(map(list, zip(*matrix)))是有效的,但其实用列表推导式会更直观简洁,代码如下:

matrix = [[1,2,3], [4,5,6]]
transposed = [list(col) for col in zip(*matrix)]

这个写法和你原来的实现效果完全一样,得到的是[[1,4], [2,5], [3,6]],而且可读性更强,很多Python开发者都会优先选择这种写法。

原理其实和你之前的思路一致:zip(*matrix)会把原矩阵的列打包成元组,然后列表推导式遍历每个元组,用list(col)把元组转换成列表,最终直接生成列表的列表,不需要再额外套一层list()去转换map对象。


如果你的矩阵可能存在行长度不一致的情况(比如有的行短有的行长),zip会自动截断到最短的行。这时候如果想保留所有元素,可以用itertools.zip_longest,示例如下:

from itertools import zip_longest
matrix = [[1,2], [3,4,5]]
transposed = [list(col) for col in zip_longest(*matrix, fillvalue=None)]
# 输出结果: [[1, 3], [2, 4], [None, 5]]

这里的fillvalue可以指定填充缺失位置的默认值,比如你想填充0的话就改成fillvalue=0。


至于性能,列表推导式和你原来的list(map(list, zip(*matrix)))在效率上相差无几,但列表推导式的语法更符合Python的惯用风格,也更容易理解。

内容的提问来源于stack exchange,提问作者OnePiece

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:08:12