python列表的底层数据结构就是数组。但通常,数组的长度或容量在创建时就已经固定下来了
python中array模块中包含的array类,它的行为更像是列表
>>> import array
>>> help(array)
其中:
DESCRIPTION
This module defines an object type which can efficiently represent
an array of basic values: characters, integers, floating point
numbers. Arrays are sequence types and behave very much like lists,
except that the type of objects stored in them is constrained.
array模块的使用:
https://blog.youkuaiyun.com/zzh1301051836/article/details/78961968
数组索引是一个随机的访问操作。在随机访问中,计算机通过执行一定数目的步骤,获取了某一项的位置。所以不管数组有多大,它访问第一项所需的时间和访问最后一项所需的时间都是相同的。
数组中有两个大小:1.物理大小:即数组长度,在数组初始化时指定其容量
2.逻辑大小:当前可供程序使用的项的数目(当前数组内存被占用的个数)
如果 逻辑大小为0,数组为空,该数组不包含任何数据项,否则,数组的最后一项索引都是其逻辑大小减一。
逻辑大小等于其物理大小,此时数组已被数据填满。
class Array(object):
def __init__(self, capacity, fillValue = None):
self.items = list()
for count in range(capacity):
self.items.append(fillValue)
self.logicalSize = 0
def __len__(self):
return len(self.items)
def __str__(self):
return str(self.items)
def __iter__(self):
return iter(self.items)
def __getitem__(self, index):
return self.items[index]
def __setitem__(self, index, newitem):
if index > len(self.items) - 1:
temp = Array(index + 1)
for i in range(len(self.items)):
temp[i] = self.itmes[i]
temp[index] = newitem
self.items = temp
else:
self.items[index] = newitem
self.logicalSize += 1
def delete(self, index):
for i in range(index, self.logicalSize - 1):
self.items[i] = self.items[i + 1]
self.logicalSize -= 1
temp = Array(self.logicalSize)
for i in range(self.logicalSize):
temp[i] = self.items[i]
self.items = temp
def insert(self, index, newitem):
if self.logicalSize == len(self.items):
temp = Array(self.logicalSize + 1)
for i in range(self.logicalSize):
temp[i] = self.items[i]
for i in range(self.logicalSize, index, -1):
temp[i] = temp[i - 1]
temp[index] = newitem
self.items = temp
self.logicalSize += 1
else:
for i in range(self.logicalSize, index, -1):
self.items[i] = self.items[i - 1]
self.items[index] = newitem
self.logicalSize += 1
二维数组
class Grid(object):
def __init__(self, rows, columns, fillValue = None):
self.data = Array(rows)
for row in range(rows):
self.data[row] = Array(columns, fillValue)
def getHeight(self):
return len(self.data)
def getWidth(self):
return len(self.data[0])
def __getitem__(self, index):
return self.data[index]
def __str__(self):
result = ""
for row in range(self.getHeight()):
for col in range(self.getWidth()):
result += str(self.data[row][col]) + ""
result += "\n"
return result
def __setitem__(self, row, col, newitem):
self.data[row][col] = newitem
多维数组,矩阵,网格,可借助Numpy