Python内置模块array:高效的数字值数组详解

一、引言

在Python中,array模块提供了一种高效的方式来存储和操作数字值数组。与列表相比,array模块的数组在存储基本数值类型(如整数、浮点数)时更加紧凑,因此在需要处理大量数值数据时,array模块是一个非常好的选择。

本文将详细介绍array模块的定义、原理、使用方法及应用案例,帮助大家更好地理解和使用这个模块。

二、知识讲解

1. array模块的定义与原理

array模块定义了一种对象类型,可以紧凑地表示由基本值(字符、整数、浮点数)组成的数组。数组是序列类型,其行为与列表非常相似,不同之处在于其中存储的对象类型是受限的,在数组对象创建时用单个字符的 类型码 来指定。

表1:array模块的类型码

类型码

C 类型

Python 类型

最小字节数

备注

'b'

signed char

int

1


'B'

unsigned char

int

1


'u'

wchar_t

Unicode 字符

2

(1)

'w'

Py_UCS4

Unicode 字符

4


'h'

signed short

int

2


'H'

unsigned short

int

2


'i'

signed int

int

2


'I'

unsigned int

int

2


'l'

signed long

int

4


'L'

unsigned long

int

4


'q'

signed long long

int

8


'Q'

unsigned long long

int

8


'f'

float

float

4


'd'

double

float

8


备注:

  1. 可能为 16 位或 32 位,取决于具体的平台。
  2. 在 Python 3.9 版本发生变更: array('u') 现在使用 wchar_t 作为 C 类型而不是已不建议使用的 Py_UNICODE

2. array模块的类与函数

2.1 array.array类

array.array类用于创建一个由 typecode 限定其条目的新数组,并能根据可选的 initializer 值来初始化。

原型:

array.array(typecode[, initializer])

参数:

  • typecode: 一个字符,指定数组中元素的类型。
  • initializer: 可选参数,用于初始化数组的值,可以是bytesbytearray、Unicode字符串或可迭代对象。

功能:

创建一个指定类型的数组,并根据initializer初始化数组。

示例:

import array

# 创建一个整数数组
int_array = array.array('i', [1, 2, 3, 4, 5])
print(int_array)  # 输出: array('i', [1, 2, 3, 4, 5])

# 创建一个浮点数数组
float_array = array.array('f', [1.0, 2.0, 3.0])
print(float_array)  # 输出: array('f', [1.0, 2.0, 3.0])

2.2 array.array类的方法

2.2.1 append(x)

在数组末尾添加一个值为x的新项。

原型:

append(x)

参数:

  • x: 要添加到数组末尾的值。

示例:

import array

int_array = array.array('i', [1, 2, 3])
int_array.append(4)
print(int_array)  # 输出: array('i', [1, 2, 3, 4])

2.2.2 extend(iterable)

将来自iterable的项添加到数组末尾。

原型:

extend(iterable)

参数:

  • iterable: 可迭代对象,其元素将被添加到数组末尾。

示例:

import array

int_array = array.array('i', [1, 2, 3])
int_array.extend([4, 5])
print(int_array)  # 输出: array('i', [1, 2, 3, 4, 5])

2.2.3 frombytes(buffer)

添加来自bytes-like object的条目。

原型:

frombytes(buffer)

参数:

  • buffer: 一个bytes-like object,其内容将被解读为机器值并添加到数组中。

示例:

import array

int_array = array.array('i')
int_array.frombytes(b'\x01\x00\x00\x00\x02\x00\x00\x00')
print(int_array)  # 输出: array('i', [1, 2])

2.2.4 tobytes()

将数组转换为一个由机器值组成的数组并返回其字节表示。

原型:

tobytes()

返回值:

一个bytes-like object,包含数组的机器值表示。

示例:

import array

int_array = array.array('i', [1, 2, 3])
byte_data = int_array.tobytes()
print(byte_data)  # 输出: b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'

2.2.5 tolist()

将数组转换为由相同的项组成的普通列表。

原型:

tolist()

返回值:

一个包含数组所有元素的普通列表。

示例:

import array

int_array = array.array('i', [1, 2, 3])
list_data = int_array.tolist()
print(list_data)  # 输出: [1, 2, 3]

3. 知识导图

以下是array模块的知识导图,帮助大家更好地理解其结构和功能。


三、应用案例

案例1:使用array模块存储和操作大量整数数据

假设我们需要处理一个包含大量整数的数据集,使用array模块可以更高效地存储和操作这些数据。

import array

# 创建一个整数数组
int_array = array.array('i', range(1000000))

# 计算数组中所有元素的和
total_sum = sum(int_array)
print(f"Total sum: {total_sum}")

# 在数组末尾添加一个新元素
int_array.append(1000000)
print(f"New array length: {len(int_array)}")

案例2:使用array模块存储和操作浮点数数据

假设我们需要处理一个包含大量浮点数的数据集,使用array模块可以更高效地存储和操作这些数据。

import array

# 创建一个浮点数数组
float_array = array.array('f', [1.0, 2.0, 3.0, 4.0, 5.0])

# 计算数组中所有元素的平均值
average = sum(float_array) / len(float_array)
print(f"Average: {average}")

# 在数组末尾添加一个新元素
float_array.append(6.0)
print(f"New array length: {len(float_array)}")

四、学习总结

学习路线

  1. 了解array模块的定义与原理。
  2. 掌握array.array类的使用方法及其方法。
  3. 熟悉array模块的类型码及其应用场景。
  4. 通过实际案例练习使用array模块。

学习总结

array模块是Python中用于高效存储和操作数字值数组的一个内置模块。通过本文的介绍,我们了解了array模块的定义、原理、使用方法及应用案例。希望大家在实际开发中能够灵活运用array模块,提高代码的效率和性能。

五、参考资料

  • Python官方文档 - array模块:(https://docs.python.org/zh-cn/3/library/array.html)
  • Python官方文档 - Python 3.13.0版本:(https://docs.python.org/zh-cn/3.13/)

通过本文的学习,我们对array模块有了更深入的了解。后续在实际开发中将能够充分利用array模块的优势,提高代码的效率和性能。


持续更新Python编程学习日志与技巧,敬请关注!


#编程# #学习# #python# #在头条记录我的2025#


原文链接:,转发请注明来源!