在本教程中,我们将重点关注一个名为 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 模块。