Python二维列表用list[:,colIndex]取列触发TypeError错误如何解决?
报错原因
Python 原生的列表(list)不支持类似 NumPy 的多维切片语法:
你写的lst[:,0]中的逗号会被 Python 解析为元组(slice(None), 0),直接传入列表的索引查询方法。但原生列表仅支持整数或者单个切片作为索引参数,传入元组必然触发类型错误,Python 3.9+ 版本的报错信息做了优化,会直接提示你传入的是不被支持的元组类型,本质原因完全一致。
解决方案
方案1:使用列表推导式(无需额外依赖,通用场景首选)
直接遍历每一行提取指定列的元素即可,示例代码如下:
lst = [[1,2,3],[10,12,13]] # 提取索引为0的列 col_0 = [row[0] for row in lst] print(col_0) # 输出结果:[1, 10]
如果你的嵌套列表存在长度不足的行,可添加判断避免索引越界:
col_0 = [row[0] for row in lst if len(row) > 0]
方案2:使用NumPy数组(大量数值运算场景首选)
如果你经常需要做矩阵类的操作,直接用NumPy数组即可原生支持[:,列索引]的切片写法:
import numpy as np lst = [[1,2,3],[10,12,13]] arr = np.array(lst) # 提取索引为0的列 col_0 = arr[:, 0] # 如果需要转回原生列表,调用tolist()方法即可 col_0_list = col_0.tolist() print(col_0_list) # 输出结果:[1, 10]
内容的提问来源于stack exchange,提问作者njminchin
相关产品推荐
相关产品推荐

