数组Array
数组Array是最基本的数据结构,在内存中为一段定长连续内存,很多编程语言都有实现。
一、一维数组
下面代码实现了一维数组和它的遍历。
clear并非清空数组,而是采用具体值对数组进行初始化。
- import ctypes
- class Array :
- def __init__( self, size ):
- assert size > 0, "Array size must be > 0"
- self._size = size
- PyArrayType = ctypes.py_object * size
- self._elements = PyArrayType()
- self.clear( None )
- def __len__( self ):
- return self._size
- def __getitem__( self, index ):
- assert index >=0 and index < len(self), "Array subscript out of range"
- return self._elements[ index ]
- def __setitem__( self, index, value ):
- assert index >=0 and index < len(self), "Array subscript out of range"
- self._elements[ index ] = value
- def clear( self, value ):
- for i in range( len(self) ) :
- self._elements[i] = value
- def __iter__( self ):
- return _ArrayIterator( self._elements )
- class _ArrayIterator :
- def __init__( self, theArray ):
- self._arrayRef = theArray
- self._curNdx = 0
- def __iter__( self ):
- return self
- def __next__( self ):
- if self._curNdx < len( self._arrayRef ) :
- entry = self._arrayRef[ self._curNdx ]
- self._curNdx += 1
- return entry
- else :
- raise StopIteration
- if __name__=='__main__':
- myarray=Array(5)
- myarray.clear(1)
- myarray.__setitem__(2,5)
- print myarray.__getitem__(2)
- it=myarray.__iter__()
- while True:
- try:
- print it.__next__()
- except StopIteration:
- break
二、二维数组
二维数组的构造基于一维数组Array,它可以看做是一个以行数为size的一维数组,区别在于数组中的每个元素并不是具体的值,而是由以列数为size的数组构成。如下图所示:
- class Array2D :
- def __init__( self, numRows, numCols ):
- self._theRows = Array( numRows )
- for i in range( numRows ) :
- self._theRows[i] = Array( numCols )
- def numRows( self ):
- return len( self._theRows )
- def numCols( self ):
- return len( self._theRows[0] )
- def __getitem__( self, ndxTuple ):
- assert len(ndxTuple) == 2, "Invalid number of array subscripts."
- row = ndxTuple[0]
- col = ndxTuple[1]
- assert row >=0 and row < self.numRows() and col >=0 and col < self.numCols(), "Array subscript out of range."
- the1dArray = self._theRows[row]
- return the1dArray[col]
- def __setitem__( self, ndxTuple, value ):
- assert len(ndxTuple) == 2, "Invalid number of array subscripts."
- row = ndxTuple[0]
- col = ndxTuple[1]
- assert row >=0 and row < self.numRows() and col >=0 and col < self.numCols(), "Array subscript out of range."
- the1dArray = self._theRows[row]
- the1dArray[col] = value
数组Array的更多相关文章
- Javascript数组Array的forEach方法
Javascript数组Array的forEach扩展方法 forEach是最常用到的数组扩展方法之一,相当于参数化循环数组,它简单的在数组的每一个元素上应用传入的函数,这也意味着只有存在的元素会被访 ...
- JavaScript 数组(Array)对象的方法
JavaScript 数组(Array)对象的方法 concat() 描述:用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 原型:arrayObject.conc ...
- javascript数组Array强大的splice()方法
javascript的Array数组提供了强大的splice()方法, 用于对数组元素的增删改 1.删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数) 删除: ...
- JavaScript 数组(Array)方法汇总
数组(Array)常用方法; 数组常用的方法:concat(),every(), filter(), forEach(), indexOf(), join(), lastIndexOf(), map ...
- JavaScript 数组(Array)对象
Array 对象 Array 对象用于在单个的变量中存储多个值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, e ...
- JavaScript 数组-Array的方法总结
JavaScript中的Array类型是经常用到的,Array类型也提供了很多方法能实现我们需求,下面我们来总结一下 一.创建Array的方法 1.使用Array构造函数 var colors=new ...
- javascript数组array
注意:1.array的length不是只读的.可以从数组的末尾移出项或者向数组中添加新项.看下面例子: var colors = ["red","yellow" ...
- 测试JavaScript数组Array
<script> var numbers = [1, 2, 3, 4, 5]; function isLessThan3(value,index,array) { var returnVa ...
- Javascript数组Array的方法总结!
1.join() 将数组的元素组成一个字符串,以分隔符连接,如果省略则默认逗号为分隔符,该方法只接收一个参数:分隔符.此方法不会改变原数组. let arr = [1,2,3,4] let arr1 ...
- JavaScript 数组(Array)方法(二)
forEach ES5新增的方法,Arr.forEach((value, index,array)=>{}); let arr=['a','b','c']; arr.forEach((val,i ...
随机推荐
- WPF 修改图片颜色
原文:WPF 修改图片颜色 本文告诉大家如何修改图片的颜色,如去掉图片的蓝色 在 WPF 可以使用很多图片处理的方法,本文告诉大家的是一个图片处理,可以把处理的图片保存在文件. 在阅读本文,我假设大家 ...
- WinForm - 无边框窗体自定义移动
为了界面的好看,有时候需要将窗体FormBorderStyle属性设为None,这样就可以根据自己的喜欢来设计界面.但这样窗体无法进行移动的.而且默认的窗体(FormBorderStyle=Sizab ...
- WPF Bind 绑定
原文:WPF Bind 绑定 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/74332515 用过W ...
- 在vs code中使用dotnet watch run
只需要在csproj文件中加入一行: <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App&quo ...
- 转义及编码(\u, \x)
首先前面的 \表示转义, \x:只是 16 进制的意思,后边跟两位,则表示单字节编码: \d:十进制:\o:八进制: 对于 \xaa ⇒ chr(0xaa) ⇒ chr(16*a+a) \u:unic ...
- [bug系列]Method not found: 'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommandBuilderFactory
bug由来 最近开始学习NetCore,想通过实战使用NetCore做一个集成数据库存储Redis缓存的WebApi项目,由于MSSQL的庞大体积,最终决定使用轻量级关系型数据库MySql. 所以最终 ...
- 第一个spring boot工程
参考. 1. 碰到的问题: -出现bind:address already in use是因为当前项目正在运行,停掉当前项目即可.cmd中命令 netstat -nao 查看所有占用的端口及PID号, ...
- 2-17-MySQL读写分离-mysql-proxy
实验环境: mysql-proxy服务端: xuegod1 IP:192.168.10.31 mysql服务器(主,负责写)服务端:xuegod2 ...
- 【C#】list 去重
原文:[C#]list 去重 Enumerable.Distinct 方法 是常用的LINQ扩展方法,属于System.Linq的Enumerable方法,可用于去除数组.集合中的重复元素,还可以自定 ...
- 获取bing图片并自动设置为电脑桌面背景(使用 URLDownloadToFile API函数)
众所周知,bing搜索网站首页每日会更新一张图片,张张漂亮(额,也有一些不合我口味的),特别适合用来做电脑壁纸. 我们想要将bing网站背景图片设置为电脑桌面背景的通常做法是: 上网,搜索bing 找 ...