python——array模块(高效的数字值数组)
1. 前言
python的array模块(是内置模块)定义了一种对象类型,可以紧凑地表示由基本值(字符、整数、浮点数)组成的数组。数组是序列类型,其行为与列表(list)非常相似,不同之处在于其中存储的对象类型是受限的(数组中的元素必须为同一类型)。这些元素在内存中是按固定大小(字节)连续存储的,相比于列表和元组类型,array模块的实现更加节省内存。array数组对象也支持索引、切片、拼接等操作,在array数组对象创建时用单个字符的 类型码 来指定存储何种类型的元素。已定义的类型码如下:
上面的图片来自于python官方文档:array — 高效的数字值数组
array数组对象的创建方法为array(typecode[, initializer])
。其中:
(1)typecode:array对象的类型码;
(2)initializer:必须是一个列表、类字节对象或者一个可迭代的对象;
array数组对象创建的例子:array.array('i',[1,2,3,4,5,6])
,创建了一个有符号整型的array数组。
2. 代码实现
(1)创建一个array数组对象,并将其与列表对象进行所占内存大小的对比。
import array
import sys
my_list = [item for item in range(10000)]
my_array = array.array('i',my_list)
# sys.getsizeof()用来获取对象所占的内存大小(byte-字节)
print(f"列表所占的内存大小(byte)为:{sys.getsizeof(my_list)}")
print(f"array数组所占的内存大小(byte)为:{sys.getsizeof(my_array)}")
输出:
列表所占的内存大小(byte)为:87624
array数组所占的内存大小(byte)为:40064
从上面代码可以看出,array数组对象所占的内存要远远小于列表对象的内存大小。
(2)array 提供的方法很多,不要想着在第一次学习的时候就试图掌握它的所有特性,遇见不懂的方法,就上网查询一下它的使用规则就行。下面简单介绍一些方法:
import array
my_list = [item for item in range(10)]
my_array = array.array('i',my_list)
print(my_array)
print(f"该array数组的类型码为:{my_array.typecode}")
print(f"内部表示中,单个数组元素的长度(单位为字节):{my_array.itemsize}")
# 1.在数组末尾添加一个新值
my_array.append(100)
print(my_array)
# 2. 删除指定的元素
my_array.remove(5)
print(my_array)
# 3. 删除指定索引下标对应的元素
my_array.pop(3)
print(my_array)
输出:
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
该array数组的类型码为:i
内部表示中,单个数组元素的长度(单位为字节):4
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100])
array('i', [0, 1, 2, 3, 4, 6, 7, 8, 9, 100])
array('i', [0, 1, 2, 4, 6, 7, 8, 9, 100])
参考文章:
Python 标准库 array 数值数组
python进阶学习笔记-数组array用法
作者:小李子-_-