Array — Python中有效的数字数组

数组是C / C ++,Java等中非常流行的数据结构。在这些语言中,数组定义为一个以上具有相似数据类型的元素的集合。Python没有内置的等效数组。它的列表和元组都是元素的集合,但它们可能是不同的类型。

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

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'

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

类型代码C型Python类型
'b'签名字符整型
'B'无符号字符整型
'u'Py_UNICODEUnicode字符
'H'签名短整型
'H'无符号短整型
'一世'带符号的int整型
'一世'无符号整数整型
'我'长签整型
'L'无符号长整型
'q'长签整型
'Q'无符号长久整型
'F'浮动浮动
'd'浮动

初始值设定项参数可以是类似于对象的字节。以下示例从字符串的字节表示形式构建一个数组。

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

数组类定义以下方法:

array.buffer_info()

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

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

计数()

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

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

延伸()

此方法将可迭代的项附加到数组的末尾或可迭代的项,它们必须具有完全相同的类型代码。否则,将引发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])

从文件()

此方法从文件对象读取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])

附加()

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

fromlist()

此方法将列表中的项目追加到数组。这等效于列表中的x: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])

插()

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

>>> 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])

去掉()

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

>>> 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'