或许我们学 Python,只听过列表(list)、元组(tuple)、集合(set)、字典(dict)
那个流行在 Java、C++和 C 中常见的那个“狠人”——数组去哪了呢?
本文将带你学习一下
- Python 的数组(array)
- 数组与列表有哪些不同
- 数组的操作
- 什么时候和如何使用数组?
在编程中,数组是相同类型的元素的集合。存储在连续内存位置。
但是,在 Python 中,它们并不常见。
当人们谈 Python 数组时,他们谈论的是 Python 列表。如果您不知道什么是列表,自行了解一下。
Python 官方还是考虑周到的,给我们提供了高效的数值数组——array模块
先导入这个模块,然后查看这个模块下有哪些函数:
In [1]: import array In [2]: dir(array) Out[2]: ['ArrayType', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_array_reconstructor', 'array', 'typecodes']
列表 vs. array 模块的 array
我们可以将列表当作数组用,但是别忘了数组的定义——相同类型。是的,在列表中,我们不能限制元素的类型。
>>>a = [1, 2, 'Hello']
如果使用 array 模块创建数组,则数组的所有元素必须为相同的数值类型。语法结构:a=arr.array(data type,value list)
>>> import array as arr >>> a = arr.array('d', [1, 2, 'Hello']) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be real number, not str
如何创建数组?
首先,我们需要导入数组模块以创建数组。
例如:
>>> import array as arr >>> a = arr.array('d', [1.1, 2.3, 4.8]) >>> print(a) array('d', [1.1, 2.3, 4.8])
在这里,我们创建了一个 float 类型的数组。字母“ d”是类型码。这确定了创建过程中数组的类型。
常用的类型代码:
注释:'u' 类型码对应于 Python 中已过时的 unicode 字符 (Py_UNICODE即 wchar_t)。 根据系统平台的不同,它可能是 16 位或 32 位。自版本 3.3 起,'u' 将与其它的 Py_UNICODE API 一起被移除
我们将不在本文中讨论不同的 C 类型。在整篇文章中,我们将使用两种类型的代码:'i'
表示整数,' d'
表示浮点数。
基本的数组操作:
如何访问数组元素?
像列表一样支持索引,索引值从 0 开始,同时支持循环访问:
>>> import array as arr >>> a = arr.array('i', [2, 4, 6, 8, 10]) >>> print('First element:', a[0]) First element: 2 >>> for i in a: ... print(i) ... 2 4 6 8 10
如何切片?
使用切片运算符 :
,只要是 Python 的序列类型,你就拿出这把刀。
>>> import array as arr >>> a = arr.array('i', [2, 4, 6, 8, 10]) >>> print(a[2:5]) array('i', [6, 8, 10]) # 从 3rd 到 5th >>> print(a[:-3]) # 从 1st 到 2nd array('i', [2, 4]) >>> print(a[:]) # 全复制 array('i', [2, 4, 6, 8, 10]) >>> print(a[::-1]) # 反转 array('i', [10, 8, 6, 4, 2])
如何更改或添加元素?
数组是可变的;它们的元素可以类似列表的方式进行更改。
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])
我们可以使用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])
我们可以使用+
运算符连接两个数组。
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)
如何 remove/delete 元素?
我们可以使用 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
我们可以使用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])
总结:什么时候使用数组?
列表比数组灵活得多。它们可以存储不同数据类型的元素,包括字符串。而且,列表比数组要快。而且,如果您需要对数组和矩阵进行数学计算,则最好使用NumPy库中数组的方法。
除非需要与 C 代码接口,此时需要用到数组模块,否则不要使用它们。