数组表示的是可以在给定的索引位置上访问或者替代的项的一个序列。实际上,python中的list的的底层数据就是数组,
可以在给定的位置上访问或者替代数组的一个项,查看数组的长度,以及获取其字符串表示。
python的array模块确实包含类array类,它的行为更像是列表,但是它仅仅限于储存的数字。这里定义一个新的类,遵从前面提到的限制,但是他可以保存任何类型的项。
用户的数据操作 | Array类中的方法 |
a=Array(10) | __init__(capcity,fillvalue=none) |
len(a) | __len__() |
str(a) | __str__() |
for item in a: | __inter__() |
a[index] | __getitem__() |
a[index]=newItem | __setitem__(index,newitem) |
随机访问和连续的内存
数组的索引是一个随机的访问操作
不管数组有多大,它访问的每一项所要的时间都是一样的
机器的地址是一个8位的二进制数字
项的地址是连续的,数组某一项的地址可以通过将两个值来相加得出,即将数组的基本地址和项的偏移地址相加来得出
一个项的偏移地址等于它的索引乘以数组的一项所需要的内存单元数目的一个常量来表示,数组的基本地址是数组的第一项的机器地址
python数组中的索引操作:
1、获取数组内存块的基本地址
2、给这个地址加上索引,返回最终的结果
随机访问是指计算机不一定必须在数组中搜索一个给定的单元,否则计算机就必须要从第一个单元开始访问,直到到达了第n个单元
动态内存的实现方式:
在程序开始的时候创建一个具有合理默认大小的数组
在数组不能保存更多的数据的时候,创建一个新的更大的数组,并且从旧的数组中转移数据项
当数组似乎存在浪费的时候,以一种类似的方式来减小数组的长度
数组的物理大小和逻辑大小:
数组的物理大小是指它的数组单元的总数,或者是在创建数组的时候,用来指定其容量的数字。
数组的逻辑大小是指它当前可以供应用程序适应的项的数目
当数组总是满的时候,不需要担心区别。如果逻辑大小为0,数组是空的
在任何给定的时间,数组中的最后一项的索引都是其逻辑大小减去1
如果逻辑大小等于物理大小,数组就已经被数据所填满
数组的操作
增加数组的大小,复杂度是O(n^2)或者log2(n)每次翻一倍
减小数组的大小,复杂度是O(n^2)或者log2(n)每次减小一半
在数组中插入一项,是线性的
在数组中删除一项,是线性的
关于网格处理的操作,就是二维矩阵的处理方法
sum=0
for row in range(table.getHeight()):
for column in range(table.getWidth):
sum+=table[row][column]
pass
pass