数组-python

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值