Python 的 array 模块是用于创建高效、紧凑的数值数组的标准库。与 Python 内置的 list 相比,array 模块创建的数组占用更少内存,并且仅能包含指定类型的元素,适用于对内存敏感的大规模数值处理场景。

常见应用场景:

(1)需要节省内存的大型数值数据处理。

(2)需要与 C 或二进制数据进行接口交互,如通过 buffer、文件读写等。

(3)处理固定类型的数值序列,如整数、浮点数、字符等。

◆ ◆

核心概念

1、array.array 是核心类

用于创建单一数据类型的数组。与 Python 的 list 不同,它的元素类型是固定的,由 typecode 指定。

2、类型代码(typecode)决定元素类型

如 'i' 表示整数、'f' 表示浮点数等。详见下方支持类型表。

3、数组支持切片、遍历、append/extend/insert/remove/pop 等操作。

语法上接近于 list,但提供了更节省空间的实现。

4、可用于与 C/C++ 的内存缓冲区接口交互(如使用 tobytes())。

◆ ◆

应用举例

例 1: 创建整数数组并遍历

import array

arr = array.array('i', [1, 2, 3, 4, 5])
for num in arr:
    print(num)

例 2:追加和插入操作

import array

arr = array.array('i', [10, 20])
arr.append(30)
arr.insert(1, 15)  # 在索引 1 插入 15
print(arr.tolist())  # 转为普通列表查看

例 3:转换为字节串并写入文件

import array

arr = array.array('h', [100, 200, 300])
with open('data.bin', 'wb') as f:
    f.write(arr.tobytes())

例 4:从文件中读取为数组

import array

arr = array.array('h')
with open('data.bin', 'rb') as f:
    arr.frombytes(f.read())
print(arr)

例 5:切片、反转与删除

import array

arr = array.array('i', [1, 2, 3, 4, 5])
print(arr[::-1])     # 倒序输出
del arr[2]           # 删除索引为 2 的元素
print(arr)

◆ ◆

常用函数速览

array.array(typecode[, initializer])

创建一个新数组,所有元素类型由 typecode 决定。

参数

typecode:字符串,指定元素类型(如 'i' 表示整数)

initializer:可选,初始化数据序列

返回:一个 array.array 对象

.append(x)

在数组末尾追加一个元素。

参数:x 为单个与 typecode 类型匹配的值

返回:无

.extend(iterable)

将一个可迭代对象中的元素逐一追加到数组末尾。

参数:任何可迭代对象

返回:无

.insert(i, x)

在索引位置 i 处插入元素 x。

参数

i:插入的位置索引

x:要插入的元素,类型需匹配

返回:无

.remove(x)

删除数组中第一个值等于 x 的元素。

参数:x 为要删除的值

返回:无

.pop([i])

移除并返回索引为 i 的元素(默认最后一个)。

参数:i 可选,表示索引

返回:被删除的元素

.tobytes()

将整个数组转为字节串(用于存储、传输)。

参数:无

返回:bytes 类型字节串

.frombytes(b)

从字节串 b 中读取数据填充数组。

参数:b 为 bytes 类型

返回:无

.tolist()

将数组转为普通 Python 列表。

参数:无

返回:列表对象

.reverse()

就地反转数组顺序。

参数:无

返回:无

◆ ◆

补充说明

1、array 只支持基本数值类型,不支持对象、字符串等。

2、若需支持混合类型或复杂结构,建议使用 struct 或 numpy。

3、与 C/C++ 接口打通时,array 是很好的内存交换工具。

4、若仅做通用容器,推荐使用内置 list,其功能更丰富。

点赞有美意,赞赏是鼓励