数组 — Python 中高效的数值数组


数组是 C/C++、Java 等语言中非常流行的一种数据结构。在这些语言中,数组被定义为多个相同数据类型元素的集合。Python 本身没有等效的数组类型。它的列表和元组都是元素的集合,但它们可以包含不同类型的数据。

Python 的 array 模块模拟了 C 类型的数组。该模块定义了 'array' 类。以下构造函数创建一个数组对象

array(typecode, initializer)

typecode 参数决定数组的类型。初始化器应该是一个序列,所有元素都必须是匹配的类型。

以下语句创建一个整数数组对象

>>> import array
>>> arr = array.array('i', range(5))
>>> arr
array('i', [0, 1, 2, 3, 4])
>>> type(arr)
<class 'array.array'>
>>> array.typecodes
'bBuhHiIlLqQfd'

array 模块定义了 typecodes 属性,它返回一个字符串。字符串中的每个字符都表示一个类型代码,指示 C 类型和等效的 Python 类型。

类型代码C 类型Python 类型
'b'有符号字符整数
'B'无符号字符整数
'u'Py_UNICODEUnicode 字符
'h'有符号短整型整数
'H'无符号短整型整数
'i'有符号整型整数
'I'无符号整型整数
'l'有符号长整型整数
'L'无符号长整型整数
'q'有符号长长整型整数
'Q'无符号长长整型整数
'f'浮点数浮点数
'd'双精度浮点数浮点数

初始化器参数可以是类字节对象。以下示例根据字符串的字节表示构建一个数组。

>>> arr1 = array.array('b', b'Hello')
>>> arr1
array('b', [72, 101, 108, 108, 111])

array 类定义了以下方法

array.buffer_info()

此方法返回一个元组 (地址,长度),给出用于保存数组内容的缓冲区的当前内存地址和元素长度。

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.buffer_info()
(2201141755144, 5)

count()

此方法返回数组中某个元素出现的次数。

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.count(2)
1

extend()

此方法将可迭代对象中的项附加到数组的末尾,或者可迭代对象必须具有完全相同的类型代码;否则,将引发 TypeError。

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr1 = array.array('i',[10,20,30])
>>> arr.extend(arr1)
>>> arr
array('i', [0, 1, 2, 3, 4, 10, 20, 30])

fromfile()

此方法从文件对象中读取 n 个项(作为机器值)并附加到数组中。

在以下示例中,我们首先以二进制写入模式打开一个文件。

>>> file = open('test.txt','wb')
>>> file.write(b'Hello Python')
12
>>> file.close()

现在我们使用此文件将其数据附加到数组对象中。

>>> a = array.array('i')
>>> file = open('test.txt','rb')
>>> a.fromfile(file,file.tell())
>>> a
array('i', [1819043144, 2035294319, 1852794996])

append()

此方法将新项附加到数组的末尾

fromlist()

此方法将列表中的项附加到数组。这相当于 for x in list: a.append(x)

>>> a = array.array('i')
>>> a.append(10)
>>> a
array('i', [10])
>>> num = [20,30,40,50]
>>> a.fromlist(num)
>>> a
array('i', [10, 20, 30, 40, 50])

insert()

在指定位置之前插入新项到数组中

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.insert(2,25)
>>> a
array('i', [10, 20, 25, 30, 40, 50])

pop()

此方法在从数组中删除指定索引处的项后返回该项。

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> x = a.pop(2)
>>> x
30
>>> a
array('i', [10, 20, 40, 50])

remove()

此方法从数组中删除给定项的第一次出现。

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.remove(30)
>>> a
array('i', [10, 20, 40, 50])

tofile()

此方法将所有项写入具有写入权限的文件对象。

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> file = open("test.txt","wb")
>>> a.tofile(file)
>>> file.close()
>>> file = open("test.txt","rb")
>>> file.read()
b'\n\x00\x00\x00\x14\x00\x00\x00\x1e\x00\x00\x00(\x00\x00\x002\x00\x00\x00'

更新于: 2019年7月30日

231 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.