Python中如何将含numpy数组的嵌套列表转为普通列表?解决tolist报错
解决嵌套列表中numpy数组转普通列表的问题
错误原因
你犯了个基础错误:tolist()是numpy数组的专属方法,而B11是Python原生的嵌套列表,直接给它调用这个方法自然会报AttributeError。
解决方案
因为你的数据是嵌套结构,需要遍历每一层元素,遇到numpy数组就调用tolist()转成普通列表,遇到子列表就继续遍历。这里提供两种实现方式:
方式1:递归处理(通用,支持任意嵌套层数)
import numpy as np B11=[[np.array([353.856161, 0. , 0. ]), np.array([ 0. , 0. , 282.754301, 0. ])], [np.array([ 0. , 294.983702, 126.991664])]] def numpy_list_converter(obj): # 如果是numpy数组,转成普通列表 if isinstance(obj, np.ndarray): return obj.tolist() # 如果是列表,递归处理每个元素 elif isinstance(obj, list): return [numpy_list_converter(item) for item in obj] # 其他类型直接返回 else: return obj C11 = numpy_list_converter(B11) print(C11)
方式2:嵌套列表推导式(适合固定层数的嵌套)
如果确定你的列表只有两层嵌套,可以直接用两层列表推导式:
C11 = [[arr.tolist() for arr in sublist] for sublist in B11]
输出结果
运行后得到的C11就是你期望的格式:
[[[353.856161, 0.0, 0.0], [0.0, 0.0, 282.754301, 0.0]], [0.0, 294.983702, 126.991664]]
内容的提问来源于stack exchange,提问作者jcbose123
相关产品推荐
相关产品推荐

