数组 — 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_UNICODE | Unicode 字符 |
| '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)
1extend()
此方法将可迭代对象中的项附加到数组的末尾,或者可迭代对象必须具有完全相同的类型代码;否则,将引发 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'
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP