用python 语言实现一个动态数组  类似于python内置的list

首先 必须

import ctypes

用于生成指定大小的数组

constructor,  生成一个初始容量为10,里面一个元素都没有的数组

#构造函数,创建了三个属性,分为用于指定初始容量,当前大小和当前数组
def __init__ (self):'Create an empty array.'self._n = 0 #sizeself._capacity = 10self._A = self._make_array(self._capacity)

实现__len__函数,此函数是用于 当你使用len()函数时,会调用__len__()函数

#构造函数中创建了_n属性来指定当前大小
def __len__ (self):return self._n

判空

# _n指定当前大小
def is_empty(self):return self._n == 0

获取当前数组中的某个元素

# 因为python的数组下标可以是负数,但是这边没有进行相应的实现,有兴趣的可以自行实现
def __getitem__ (self, k):if not 0 <= k < self._n:raise ValueError('invalid index') return self._A[k]

追加元素

def append(self, obj):#当数组当前元素已满时,扩充容量为原来的两倍,在进行追加if self._n == self._capacity:self._resize(2 * self._capacity)self._A[self._n] = obj    self._n += 1

创建数组和扩充数组

def _make_array(self, c):return (c * ctypes.py_object)( )def _resize(self, c):B = self._make_array(c)#扩充之后,需要将原数组中的元素copy到新数组中for k in range(self._n):B[k] = self._A[k]self._A = Bself._capacity = c

在指定位置插入一个value

def insert(self, k, value):#当数组当前元素已满时,扩充容量为原来的两倍,在进行insertif self._n == self._capacity:self._resize(2 * self._capacity)for j in range(self._n, k, -1):self._A[j] = self._A[j-1]self._A[k] = valueself._n += 1

将指定位置的元素删除

def pop(self,idx):if idx >= self._n:raise ValueError( 'index out of bounds' )for i in range(idx,self._n - 1):self._A[i]=self._A[i+1]self._A[self._n - 1] = Noneself._n -= 1

删除指定value的元素(找到第一个就结束)

def remove(self, value):for k in range(self._n):if self._A[k] == value:for j in range(k, self._n - 1):self._A[j] = self._A[j+1]self._A[self._n - 1] = Noneself._n -= 1returnraise ValueError( 'value not found' )

打印数组中的元素

def _print(self):for i in range(self._n):print(self._A[i], end = ' ')print()

测试代码:

mylist = DynamicArray()
print ('size was: ', str(len(mylist)))
mylist.append(10)
mylist.append(20)
mylist.append(30)
mylist.insert(0, 0)
mylist.insert(1, 5)
mylist.insert(3, 15)
mylist._print()
mylist.remove(20)
mylist._print()print ('size is: ', str(len(mylist)))
mylist.pop(3)
mylist._print()
print ('size is: ', str(len(mylist)))

测试输出

size was:  0
0 5 10 15 20 30
0 5 10 15 30
size is:  5
0 5 10 30
size is:  4

转载于:https://www.cnblogs.com/zhanyifan/p/9746610.html

python dynamic array相关推荐

  1. python numpy.array 与list类似,不同点:前者区分元素不用逗号,中间用空格,矩阵用[]代表行向量,两个行向量中间仍无逗号;  而list区分元素用逗号

    python numpy.array 与list类似,不同点:前者区分元素不用逗号,中间用空格,矩阵用[]代表行向量,两个行向量中间仍无逗号: 而list区分元素用逗号.而 numpy.array 的 ...

  2. Python数据结构——array

    array 数组 array是什么 一般来说,array基本是所有程序语言都有的一种基础线性结构,元素以特定的顺序存储在一段连续的内存中. 在Python中其实也有array这种数据结构,和其他语言的 ...

  3. python数组用sum求和_对python中array.sum(axis=?)的用法介绍

    根据代码中运行的结果来看,主要由以下几种: 1. sum():将array中每个元素相加的结果 2. axis对应的是维度的相加. 比如: 1.axis=0时,对饮搞得是第一个维度元素的相加, [[0 ...

  4. C++Dynamic Array动态数组(附完整源码)

    Dynamic Array动态数组 Dynamic Array动态数组算法的完整源码(定义,实现,main函数测试) Dynamic Array动态数组算法的完整源码(定义,实现,main函数测试) ...

  5. C语言实现动态数组dynamic array(附完整源码)

    C语言实现动态数组dynamic array 数组结构体的定义 实现以下7个接口 完整头文件 完整源文件 完整 main 测试文件 数组结构体的定义 typedef struct dynamic_ar ...

  6. (numpy)python中Array的常用函数

    python中Array的常用函数 1.unique 2.sum 3.max 1.unique a = np.random.randint(10, size=20).reshape(4,5) a &g ...

  7. python 替换array中的值_Python五个隐藏的特性,你可能从未听说过

    前言 在本文中,我将向您展示Python中最常见的5个特性.有经验的Python开发人员可能认识其中一些.然而,这对其他人仍将是未知的. ... 是的,你没看错,在Python中...是一个有效的构造 ...

  8. python php array,python处理PHP数组文本文件实例

    需求: 对一个配置文件进行处理,拿出可用的字符来拼接,下面是原始文本,我们要得到这样的结果, 代码如下: redis -h 127.0.0.1 -p 6379 | select 2 redis -h ...

  9. python:array,mat,tolist,list

    1.对于二维数据 >>> from numpy import * >>> a1 = [[1,2,3],[4,5,6]] #获得一个列表 >>> a ...

  10. python:array和list转换以及数组切片

    Python中,数组array和列表list的转换很直接. import numpy as np 1. 首先建立list aaa = [[1,2,3],[4,5,6],[7,8,9],[10,11,1 ...

最新文章

  1. Ubuntu16.04 安装
  2. “龙井”开箱评测 |Alibaba Dragonwell 新手上路指南
  3. 40. Combination Sum II **
  4. 【转】CMMI环境下,该如何实施Agile?
  5. 特斯拉中国上调Model 3售价 涨价4500元起
  6. ACL2020 | 词向量性别偏见
  7. 前端快来!最火的 Vue.js 开源项目出炉
  8. 红黑树与平衡二叉树_大佬用这近百张图来给我解释红黑树,看完直接跪了!
  9. python中match用法_python re.match()用法相关示例
  10. Instantiation of Chaincode using Fabric Node manifest for hyperledger/fabric-ccenv:latest not found
  11. 3DEC离散元数值模拟技术与应用
  12. 如何用深度学习来写歌词(神经网络实现)
  13. 小米摄像头有onvif协议_小米8SE、魅族16T、荣耀畅玩9A对比
  14. loj6388 「THUPC2018」赛艇 / Citing
  15. 天津市高中计算机会考,天津高中会考科目有哪些
  16. 轻快步伐远不足以跟上轻快心情
  17. (PTA)数据结构(作业)3、链表
  18. 信捷 XDH Ethercat 正负极限的设置
  19. 维吉尼亚算法python编程实现
  20. sonar覆盖率、代码覆盖率、分支覆盖率的计算方式

热门文章

  1. 使用Git上传文件至Github中
  2. linux目录分配独立磁盘空间,Linux 分配/home的磁盘空间给根目录
  3. Unix系统中常用的信号含义
  4. Java程序设计24学时轻松掌握_24小时轻松掌握系列——Java程序设计 24学时轻松掌握...
  5. caffe手写数字识别-训练模型
  6. 极客大学架构师训练营-架构师技术图谱-大作业二
  7. 极客大学架构师训练营 JVM虚拟机原理 JVM垃圾回收原理 Java编程优化 秒杀 第九次作业
  8. 极客大学架构师训练营 系统架构 分布式数据库 数据分片 业务分库 CAP ACID BASE 第11课 听课总结
  9. NumPy库---文件操作
  10. 基于 Spark推荐 系统应用 现 状