杰瑞科技汇

Python array如何转为list?

  1. Python 内置的 array 模块:这是一个轻量级的数组,只能存储同种类型的数据。
  2. NumPy 库的 ndarray 对象:这是在科学计算、数据分析领域最核心的数据结构,功能强大,可以存储多维数组。

下面我将分别介绍如何将这两种“数组”转换为 list

Python array如何转为list?-图1
(图片来源网络,侵删)

将 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 列表的嵌套结构。

Python array如何转为list?-图2
(图片来源网络,侵删)

示例代码

请确保你已经安装了 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 数组。

Python array如何转为list?-图3
(图片来源网络,侵删)
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 的最佳、最简单、最可靠的方法,请优先使用它。

分享:
扫描分享到社交APP
上一篇
下一篇