动态数组

在python中,列表,集合和字典是可变对象。数字,字符串和元组是不可变的对象。可变对象意味着我们从列表,集合或字典中添加/删除项目,但是对于不可变对象(例如元组或字符串)而言,情况并非如此。

在python中,列表是一个动态数组。让我们尝试创建一个动态列表->>> #Create an empty list, named list1

>>> list1 = []

>>> type (list1)

将一些项目添加到我们的空列表list1->>> # Add items

>>> list1 =[2, 4, 6]

>>> list1

[2, 4, 6]

>>> # Another way to add items, using append.

>>> list1.append('Nhooo')

>>> list1

[2, 4, 6, 'Nhooo']

从列表中删除一些项目->>> # deleting item from a list

>>> list1.pop()

'Nhooo'

>>> list1

[2, 4, 6]

从上方我们可以看到列表实际上是数组的扩展,在这里我们可以修改(增加或减少)列表的大小。我们从大小为“零”的列表开始,然后向其中添加“四个”项目。

动态数组实现的基础

考虑一个示例,其中在数组的大小已满时附加了list .ie list1,然后,我们需要执行以下步骤来克服其大小限制的缺点。这是动态数组实现背后的基础-分配具有更大容量的新数组列表2

设置list2 [i] = list1 [i],因为i = 0,1….n-1,其中n是该项目的当前编号。

设置list1 = list2,因为现在list2正在引用我们的新列表。

然后,只需将新项目插入(添加)到我们的列表(列表1)即可。

让我们为如何在python编程中实现动态数组概念创建一个简单的代码。我们将使用python中的内置库类ctypes创建自己的动态数组类,该类将用作ctypes模块的原始数组。

dynamicArray.pyimport ctypes

class DynamicArray(object):

#Initialize it

def __init__(self):

#We'll have three attributes

self.n = 0 # by default

self.capacity = 1 # by default

self.A = self.make_array(self.capacity) # make_array will be defined later

#Length method

def __len__(self):

#It will return number of elements in the array

return self.n

def __getitem__(self, k):

#it will return the elements at the index k

if not 0 <=k

return IndexError('k is out of bounds')

return self.A[k]

def append(self, element):

#checking the capacity

if self.n == self.capacity:

#double the capacity for the new array i.e

self.resize(2*self.capacity) # _resize is the method that is defined later

# set the n indexes of array A to elements

self.A[self.n] = element

self.n += 1

def _resize(self, new_cap): #new_cap is for new capacity

#declare array B

B = self.make_array(new_cap)

for k in range(self.n):

B[k] = self.A[k] # referencing the elements from array A to B

#ones refered then

self.A = B # A is now the array B

self.capacity = new_cap # resets the capacity

#making the make-array method using ctypes

def make_array(self,new_cap):

return (new_cap * ctypes.py_object)()

arr = DynamicArray()

当我们的动态类可以使用时,让我们尝试一下->>> len(arr)

0

>>> arr.append(1)

>>> #First item entered

>>> len(arr)

1

>>> arr.append('Nhooo')

>>> #second item entered

>>> len(arr)

2

>>> arr[1]

'Nhooo'

就是这样,我们创建了自己的动态数组,并且可以调整数组的大小,该数组是python中的列表。

python 数组 动态赋值_动态数组在Python中的实现相关推荐

  1. 动态赋值_动态的赵爽弦图【GeoGebra制作教程】

    勾股定理:如果直角三角形的两条直角边长分别为a,b,斜边长为c,那么 . 仅用一张动态的赵爽弦图就可明白如何证明勾股定理--请看用动态数学软件GeoGebra制作的效果图: 形象直观,可交互 这是如何 ...

  2. 数据数组赋值_嵌入式-数组赋值

    C语言中表达数据的基本类型时,用基本数据类型描述,例如整型,字符型,浮点型.在表达数据的复杂结构时,使用了构造数据类型这样的特殊类型描述,例如数组,结构体,共用体.数组是最常用的构造类型,也是最简单的 ...

  3. python给矩阵赋值_解决Python二维数组赋值问题

    解决Python二维数组赋值问题 当我们采用s=[[0]*3]*2初始化一个数组,然后对s[0][0]进行赋值,改变的是第一列所有的值.因为用s = [[0]*3]*2 初始化数组,他表示的是指向这个 ...

  4. python给矩阵赋值_关于python:numpy数组赋值问题

    我在Python2.6.5中有一个关于numpy的奇怪问题.我分配了一个numpy数组,然后将一个新变量等效到它.当我对新数组执行任何操作时,原始数组的值也会更改.为什么会这样?请参阅下面的示例.请启 ...

  5. python定义三维数组手机端_三维数组python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我有一个三维数组temprsubset我取了两个维度的平均值. 代码:f=mfd ...

  6. python 动态类型_动态类型(Dynamic type)

    在学习更复杂的对象类型之前,先掌握python的动态类型这一概念,是十分必要的.动态类型以及它提供的多态性是python语言简洁性和灵活性的基础. -------------------------- ...

  7. android给数组添加新元素_「数组赋值」什么是数组、如何创建数组、数组赋值、数组增加一个新元素 - seo实验室...

    数组赋值 一起组团(什么是数组) 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会 ...

  8. java创建数组并赋值_「java 数组」Java创建数组的方法 - seo实验室

    java 数组 最近学java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章! Java创建数组的方法大致有三种 说明:这里以int为数据类型以arr ...

  9. 新建一个数组为期赋值_我为期两周的项目如何成为全职的开源创业公司

    新建一个数组为期赋值 一年多以前,我决定建立一家专注于自定义Web应用程序开发,启动和独特网站项目的软件业务. 我建立了一支非常强大和才华横溢的团队,他们雄心勃勃地帮助我成立这家公司,作为他们的副业. ...

最新文章

  1. JDBC的学习(三)——以查询新闻系统为例
  2. CentOS7.2 安装Squid3.5及正、反向代理设置
  3. pcb外观维修_电路板常用维修技巧,送给从事维修工作的兄弟姐妹们
  4. NHibernate教程2(转载)
  5. Chrome浏览器可以修改特定页面背景色吗?Chrome浏览器修改特定页面背景色的方法
  6. 手机学linux软件下载,Linux标准教科书下载
  7. python sklearn库 rnn_如何使用Tensorflow计算RNN和LSTM模型的AUC并生成ROC曲线?
  8. 遍历Panel1中所有label控件的Text
  9. vs2008怎么创建c语言程序,VS2008的使用
  10. 资源池以及资源池化是什么意思?
  11. 网络出口究竟选择防火墙,还是路由器?
  12. 【ASP.NET Core分布式项目实战】(三)整理IdentityServer4 MVC授权、Consent功能实现...
  13. 爬虫 - 提高爬虫效率的方法
  14. atan java_Java Math atan() 使用方法及示例
  15. 流利阅读 2019.2.2 Barbie will soon be 60—and is still going strong
  16. 构建orangePi r1 plus (RK3328)系统的整个过程
  17. 2021年中国金针菇供需现状及竞争格局分析,上半年行业整体盈利水平降低「图」
  18. Confession:关于本博客以及实习
  19. 中国半导体企业IPO激增;英特尔拆分显卡业务部门;特斯拉将开启新一轮裁员丨每日大事件...
  20. 程序人生:必须了解的程序员 8个职业发展方向

热门文章

  1. 叉乘、点乘、矩阵变换
  2. Python Base64转码解码
  3. Spring Bean生命周期,就像人的一生
  4. java二维数组添加数据_Java小白入门必懂知识点
  5. Django-配置媒体资源-设置路由分发规则(下)
  6. 2.5G 传输特性分析仪 怎么选 TFN D300S 给您答案
  7. Mobox 知识管理平台助推市长质量奖
  8. Docker容器(1):安装docker,上线简单的2048,马里奥小游戏
  9. C语言实训——经点小游戏马里奥开发day2
  10. Microsoft JET Database Engine 错误 '80004005' 不可识别的数据库格式