Python 数组

在本教程中,我们将重点关注一个名为 array 的模块。array 模块允许我们存储一系列数值。

注意:当人们在 Python 中提到数组时,通常指的是 Python 列表。如果是这种情况,请访问 Python 列表 教程。


创建 Python 数组

要创建数值数组,我们需要导入 array 模块。例如:

import array as arr
a = arr.array('d', [1.1, 3.5, 4.5])
print(a)

输出

array('d', [1.1, 3.5, 4.5])

在这里,我们创建了一个 float 类型的数组。字母 d 是一个类型代码。它在创建时决定了数组的类型。

常用类型代码如下:

代码 C 类型 Python 类型 最小字节
b 有符号字符 int 1
B 无符号字符 int 1
u Py_UNICODE Unicode 2
h 有符号短整型 int 2
H 无符号短整型 int 2
i 有符号整型 int 2
I 无符号整型 int 2
l 有符号长整型 int 4
L 无符号长整型 int 4
f 浮点数 浮点数 4
d 双精度浮点数 浮点数 8

本文将不讨论不同的 C 类型。在整篇文章中,我们将使用两种类型代码:i 表示整数,d 表示浮点数。

注意:Unicode 字符的 u 类型代码自版本 3.3 起已弃用。请尽量避免使用。


访问 Python 数组元素

我们使用索引来访问数组的元素

import array as arr
a = arr.array('i', [2, 4, 6, 8])

print("First element:", a[0])
print("Second element:", a[1])
print("Last element:", a[-1])

输出

First element: 2
Second element: 4
Last element: 8

注意:与列表类似,索引从 0 开始(而不是 1)。


切片 Python 数组

我们可以使用切片运算符 : 来访问数组中的一系列项。

import array as arr

numbers_list = [2, 5, 62, 5, 42, 52, 48, 5]
numbers_array = arr.array('i', numbers_list)

print(numbers_array[2:5]) # 3rd to 5th
print(numbers_array[:-5]) # beginning to 4th
print(numbers_array[5:])  # 6th to end
print(numbers_array[:])   # beginning to end

输出

array('i', [62, 5, 42])
array('i', [2, 5, 62])
array('i', [52, 48, 5])
array('i', [2, 5, 62, 5, 42, 52, 48, 5])

更改和添加元素

数组是可变的;它们的元素可以像列表一样更改。

import array as arr

numbers = arr.array('i', [1, 2, 3, 5, 7, 10])

# changing first element
numbers[0] = 0    
print(numbers)     # Output: array('i', [0, 2, 3, 5, 7, 10])

# changing 3rd to 5th element
numbers[2:5] = arr.array('i', [4, 6, 8])   
print(numbers)     # Output: array('i', [0, 2, 4, 6, 8, 10])

输出

array('i', [0, 2, 3, 5, 7, 10])
array('i', [0, 2, 4, 6, 8, 10])

我们可以使用 append() 方法向数组添加一个项,或者使用 extend() 方法添加多个项。

import array as arr

numbers = arr.array('i', [1, 2, 3])

numbers.append(4)
print(numbers)     # Output: array('i', [1, 2, 3, 4])

# extend() appends iterable to the end of the array
numbers.extend([5, 6, 7])
print(numbers)     # Output: array('i', [1, 2, 3, 4, 5, 6, 7])

输出

array('i', [1, 2, 3, 4])
array('i', [1, 2, 3, 4, 5, 6, 7])

我们还可以使用 + 运算符连接两个数组。

import array as arr

odd = arr.array('i', [1, 3, 5])
even = arr.array('i', [2, 4, 6])

numbers = arr.array('i')   # creating empty array of integer
numbers = odd + even

print(numbers)

输出

array('i', [1, 3, 5, 2, 4, 6])    

删除 Python 数组元素

我们可以使用 Python 的 del 语句从数组中删除一个或多个项。

import array as arr

number = arr.array('i', [1, 2, 3, 3, 4])

del number[2]  # removing third element
print(number)  # Output: array('i', [1, 2, 3, 4])

del number  # deleting entire array
print(number)  # Error: array is not defined

输出

array('i', [1, 2, 3, 4])
Traceback (most recent call last):
  File "<string>", line 9, in <module>
    print(number)  # Error: array is not defined
NameError: name 'number' is not defined

我们可以使用 remove() 方法删除给定项,使用 pop() 方法删除给定索引处的项。

import array as arr

numbers = arr.array('i', [10, 11, 12, 12, 13])

numbers.remove(12)
print(numbers)   # Output: array('i', [10, 11, 12, 13])

print(numbers.pop(2))   # Output: 12
print(numbers)   # Output: array('i', [10, 11, 13])

输出

array('i', [10, 11, 12, 13])
12
array('i', [10, 11, 13])

访问此页面以了解更多关于 Python 数组和数组方法


Python 列表与数组

在 Python 中,我们可以将列表视为数组。但是,我们不能限制列表中存储的元素类型。例如:

# elements of different types
a = [1, 3.5, "Hello"] 

如果您使用 array 模块创建数组,则数组的所有元素必须是相同的数值类型。

import array as arr
# Error
a = arr.array('d', [1, 3.5, "Hello"])

输出

Traceback (most recent call last):
  File "<string>", line 3, in <module>
    a = arr.array('d', [1, 3.5, "Hello"])
TypeError: must be real number, not str

何时使用数组?

列表比数组灵活得多。它们可以存储不同数据类型的元素,包括字符串。而且,如果您需要对数组和矩阵进行数学计算,最好使用 NumPy 等工具。

那么,Python 数组模块创建的数组有什么用呢?

array.array 类型只是 C 数组的薄包装器,它提供了基本 C 风格数据类型的空间高效存储。如果您需要分配一个已知不会更改的数组,那么数组可能比列表更快且使用更少的内存。

除非您确实需要数组(可能需要 array 模块来与 C 代码交互),否则不建议使用 array 模块。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战