Python嵌套列表索引报错TypeError: list indices must be integers or slices,not tuple
错误原因
你定义的boxes_preds是Python原生嵌套列表,原生列表不支持...(省略号对象)搭配逗号分隔的多维索引语法。
当你写boxes_preds[..., 0:1]时,Python会把方括号里逗号分隔的两个内容打包成元组(Ellipsis, slice(0, 1))传给列表的索引方法,而原生列表的索引只接受整数、单个切片类型的参数,识别不了元组类型的索引,就会抛出你看到的TypeError: list indices must be integers or slices, not tuple报错。
注:...多维切片是NumPy数组、PyTorch张量这类专门做多维数值计算的数据结构才支持的语法,不能直接套在原生列表上用。
修改方案
根据实际需求选对应写法即可:
- 如果要保留原生Python列表结构,用列表推导式遍历每个子列表做切片,就能实现和预期索引一致的效果:
boxes_preds = [[1, 300, 400, 250, 350],[0, 450, 150, 500, 420]] res = [item[0:1] for item in boxes_preds] print(res) # 运行输出:[[1], [0]]
- 如果你后续还要频繁使用类似的多维索引操作做数值计算,直接把列表转成NumPy数组就可以沿用原来的写法:
import numpy as np boxes_preds = np.array([[1, 300, 400, 250, 350],[0, 450, 150, 500, 420]]) print(boxes_preds[..., 0:1]) """ 运行输出: [[1] [0]] """
内容的提问来源于stack exchange,提问作者keeponlearning101
相关产品推荐
相关产品推荐

