Python内置库:array(简单数组)

Python内置库:array(简单数组),第1张

概述array模块提供了一种数组概念上的紧凑类型的实现,数组中的元素必须为同一类型,且为基础数据类型(字符、整数或浮点数),这些元素在内存中是按固定大小(字节)连续存储的,相比于列表和元组类型,array模块的实现更加节省内存。但是注意,使用的时候还是需要根据实际情况来看,因为Python对于数字、

array模块提供了一种数组概念上的紧凑类型的实现,数组中的元素必须为同一类型,且为基础数据类型(字符、整数或浮点数),这些元素在内存中是按固定大小(字节)连续存储的,相比于列表和元组类型,array模块的实现更加节省内存。但是注意,使用的时候还是需要根据实际情况来看,因为Python对于数字、字符串等基础数据类型也是做了优化的,不一定array模块就更节省内存。

>>> import sys>>> import array>>> num = 100000>>> lst = List(i for i in range(num))>>> sys.getsizeof(lst)879840>>> a = array.array('i', lst)  # i表示数组中元素的类型,具体支持的类型见下面的表格>>> a.itemsize  # 每个元素占用的内存大小,这里为4byte4>>> sys.getsizeof(a)  # 可以看到,总的大小为400064=4*num+64,比List类型少了一半多400064

array支持的数据类型(Type code为array.array的第一个参数)

Type codeC TypePython TypeMinimun size in bytes
'b'signed charint1
'B'unsigned charint1
'u'wchar_tUnicode character2
'h'signed shortint2
'H'unsigned shortint2
'i'signed intint2
'I'unsigned intint2
'l'signed longint4
'L'unsigned longint4
'q'signed long longint8
'Q'unsigned long longint8
'f'floatfloat4
'd'doublefloat8

注:array('u')可能是16位或者32位,这取决于运行的系统。并且在python3.9之后将弃用之前的Py_UNICODE,而使用现在的wchar_t,但是不影响以前Py_UNICODE的使用,因为Py_UNICODE只是wchar_t的别名。但是会在Python4.0中弃用Py_UNICODE。

array类

array.array(typecode[, initializer]):使用typecode参数创建一个array对象,也可以使用initializer参数初始化一个array对象,initializer必须是一个列表、bytes-like对象或者一个可迭代的对象,不过需要注意这些对象中的元素需要和上面表格中的Python Type匹配。array对象也支持索引、切片、拼接等 *** 作,不过前提是 *** 作的对象的typecode都是同一种类型。
常用的方法和属性:

typecode:array对象的typecode属性。itemsize:array对象中元素占用的内存大小,单位是byte。append(x):在array对象的末尾添加一个元素x。buffer_info():返回一个元组(address, length),address是array对象的内存地址,length是array对象中元素的个数。可以使用array.buffer_info()[1] * array.itemsize计算出array对象的字节数。count(x):统计x在array对象中出现的次数。extend(iterable):将另一个可迭代对象中的元素添加到当前array对象的末尾,需要注意,可迭代对象的元素类型需要和当前array对象的元素类型匹配,否则会引发TypeError。frombytes(s):将一个字符串当做array对象,并将其中的元素添加到当前array对象中(就像使用fromfile(f, n)从文件中读取出来的字符串)。(python3.2更新:fromstring()被重命名为frombytes())。fromfile(f, n):从文件对象中读取n项,添加到当前array对象的末尾。注意,如果n超出了文件对象本身具有的item数量,则会抛出EOFError,不过文件对象中的item依然会被添加到array对象中。fromList(List):从将一个列表中的元素添加到当前array对象中,如果列表中的元素类型与array对象不匹配,则会抛出异常,不过此时array对象不会被改变。fromunicode(s):将一个Unicode字符串中的字符添加到当前array对象中,不过此时array对象必须是'u'类型,如果s是其他类型,可以使用array.frombytes(unicodestring.encode(enc))。index(x):返回x在array中的第一个索引。insert(i, x):在位置i前插入值x,i允许为负值。pop([i]):从array数组中删除并返回索引为i的值,i默认为-1。remove(x):从array中移除第一个找到的值x。reverse():反转array中元素的顺序。tobytes():将array转换为bytes()数组。(python3.2更新:tostring()被重命名为tobytes())tofile(f):将array对象所有元素写入文件。toList():将array对象转换为List对象。tounicode():将array对象转换为Unicode字符串,注意,此时array对象必须是'u'类型,如果是其他类型,可以使用array.tobytes().decode(enc)来获取一个Unicode字符串。 总结

以上是内存溢出为你收集整理的Python内置库:array(简单数组)全部内容,希望文章能够帮你解决Python内置库:array(简单数组)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1187963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存