- Python 内置的
array模块:这是一个轻量级的数组,只能存储同种类型的数据。 - NumPy 库的
ndarray对象:这是在科学计算、数据分析领域最核心的数据结构,功能强大,可以存储多维数组。
下面我将分别介绍如何将这两种“数组”转换为 list。

将 Python 内置的 array.array 转换为 list
这是最直接的情况,Python 内置的 array 对象有一个非常方便的方法叫做 tolist(),它的作用就是将数组中的所有元素转换为一个列表。
示例代码
import array
# 1. 创建一个 array 对象
# 'i' 表示数组元素类型为整数 (integer)
# [1, 2, 3, 4, 5] 是初始数据
my_array = array.array('i', [1, 2, 3, 4, 5])
print(f"原始 array 对象: {my_array}")
print(f"原始 array 的类型: {type(my_array)}")
# 2. 使用 tolist() 方法进行转换
my_list = my_array.tolist()
print(f"转换后的 list: {my_list}")
print(f"转换后的 list 的类型: {type(my_list)}")
输出结果
原始 array 对象: array('i', [1, 2, 3, 4, 5])
原始 array 的类型: <class 'array.array'>
转换后的 list: [1, 2, 3, 4, 5]
转换后的 list 的类型: <class 'list'>
对于 array.array,直接调用 .tolist() 方法是标准且最高效的方式。
将 NumPy 的 ndarray 转换为 list
NumPy 是 Python 数据科学生态的基石,它的 ndarray(N-dimensional array)对象同样提供了 tolist() 方法来将数组转换为 Python 的原生列表。
这个方法对于多维数组特别有用,它会递归地将 NumPy 数组的结构(包括维度)转换为 Python 列表的嵌套结构。

示例代码
请确保你已经安装了 NumPy 库,如果没安装,可以通过 pip install numpy 来安装。
import numpy as np
# 1. 创建一个一维的 ndarray
np_array_1d = np.array([10, 20, 30, 40, 50])
print("--- 一维 NumPy 数组转换 ---")
print(f"原始 NumPy 数组: {np_array_1d}")
print(f"原始 NumPy 数组的类型: {type(np_array_1d)}")
# 2. 使用 tolist() 方法进行转换
list_from_np_1d = np_array_1d.tolist()
print(f"转换后的 list: {list_from_np_1d}")
print(f"转换后的 list 的类型: {type(list_from_np_1d)}")
print("-" * 20)
# 3. 创建一个多维的 ndarray
np_array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("--- 二维 NumPy 数组转换 ---")
print(f"原始 NumPy 数组:\n{np_array_2d}")
print(f"原始 NumPy 数组的类型: {type(np_array_2d)}")
# 4. 使用 tolist() 方法进行转换
list_from_np_2d = np_array_2d.tolist()
print(f"转换后的 list: {list_from_np_2d}")
print(f"转换后的 list 的类型: {type(list_from_np_2d)}")
输出结果
--- 一维 NumPy 数组转换 ---
原始 NumPy 数组: [10 20 30 40 50]
原始 NumPy 数组的类型: <class 'numpy.ndarray'>
转换后的 list: [10, 20, 30, 40, 50]
转换后的 list 的类型: <class 'list'>
--------------------
--- 二维 NumPy 数组转换 ---
原始 NumPy 数组:
[[1 2 3]
[4 5 6]]
原始 NumPy 数组的类型: <class 'numpy.ndarray'>
转换后的 list: [[1, 2, 3], [4, 5, 6]]
转换后的 list 的类型: <class 'list'>
对于 NumPy 的 ndarray,同样使用 .tolist() 方法,它能完美处理多维数组,将 NumPy 的结构化数据转换为 Python 原生的嵌套列表。
其他方法(不推荐,但值得了解)
虽然 tolist() 是最标准的方法,但你也可以通过其他方式实现转换,不过通常它们要么不够灵活,要么效率更低。
使用内置的 list() 构造函数
这种方法对于一维数组是可行的,但对于多维 NumPy 数组,它只会将最外层的数组对象转换为一个列表,而内部的元素仍然是 NumPy 数组。

import numpy as np
np_array = np.array([[1, 2], [3, 4]])
# 使用 list() 构造函数
my_list = list(np_array)
print(f"使用 list() 转换的结果: {my_list}")
print(f"第一个元素的类型: {type(my_list[0])}") # 仍然是 numpy.ndarray
输出:
使用 list() 转换的结果: [array([1, 2]), array([3, 4])]
第一个元素的类型: <class 'numpy.ndarray'>
这通常不是我们想要的结果。
使用列表推导式
对于一维数组,列表推导式可以工作,但代码比 tolist() 更冗长。
import numpy as np
np_array = np.array([10, 20, 30])
my_list = [x for x in np_array]
print(f"使用列表推导式转换的结果: {my_list}")
对于多维数组,需要嵌套列表推导式,会变得非常复杂和难以阅读。
总结与建议
| 数组类型 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
array.array |
my_array.tolist() |
简单、直接、高效、是标准方法 | 无 |
numpy.ndarray |
my_numpy_array.tolist() |
简单、高效、能正确处理多维结构 | 需要安装 NumPy 库 |
核心结论:
无论你处理的是 Python 内置的 array.array 还是 NumPy 的 ndarray,.tolist() 都是将它们转换为 Python list 的最佳、最简单、最可靠的方法,请优先使用它。
