数组Array是最基本的数据结构,在内存中为一段定长连续内存,很多编程语言都有实现。

一、一维数组

下面代码实现了一维数组和它的遍历。

clear并非清空数组,而是采用具体值对数组进行初始化。

  1. import ctypes
  2.  
  3. class Array :
  4. def __init__( self, size ):
  5. assert size > 0, "Array size must be > 0"
  6. self._size = size
  7. PyArrayType = ctypes.py_object * size
  8. self._elements = PyArrayType()
  9. self.clear( None )
  10. def __len__( self ):
  11. return self._size
  12. def __getitem__( self, index ):
  13. assert index >=0 and index < len(self), "Array subscript out of range"
  14. return self._elements[ index ]
  15. def __setitem__( self, index, value ):
  16. assert index >=0 and index < len(self), "Array subscript out of range"
  17. self._elements[ index ] = value
  18. def clear( self, value ):
  19. for i in range( len(self) ) :
  20. self._elements[i] = value
  21. def __iter__( self ):
  22. return _ArrayIterator( self._elements )
  1. class _ArrayIterator :
  2. def __init__( self, theArray ):
  3. self._arrayRef = theArray
  4. self._curNdx = 0
  5.  
  6. def __iter__( self ):
  7. return self
  8.  
  9. def __next__( self ):
  10. if self._curNdx < len( self._arrayRef ) :
  11. entry = self._arrayRef[ self._curNdx ]
  12. self._curNdx += 1
  13. return entry
  14. else :
  15. raise StopIteration
  16.  
  17. if __name__=='__main__':
  18. myarray=Array(5)
  19. myarray.clear(1)
  20. myarray.__setitem__(2,5)
  21. print myarray.__getitem__(2)
  22. it=myarray.__iter__()
  23. while True:
  24. try:
  25. print it.__next__()
  26. except StopIteration:
  27. break

二、二维数组

二维数组的构造基于一维数组Array,它可以看做是一个以行数为size的一维数组,区别在于数组中的每个元素并不是具体的值,而是由以列数为size的数组构成。如下图所示:

  1. class Array2D :
  2. def __init__( self, numRows, numCols ):
  3. self._theRows = Array( numRows )
  4. for i in range( numRows ) :
  5. self._theRows[i] = Array( numCols )
  6. def numRows( self ):
  7. return len( self._theRows )
  8. def numCols( self ):
  9. return len( self._theRows[0] )
  10. def __getitem__( self, ndxTuple ):
  11. assert len(ndxTuple) == 2, "Invalid number of array subscripts."
  12. row = ndxTuple[0]
  13. col = ndxTuple[1]
  14. assert row >=0 and row < self.numRows() and col >=0 and col < self.numCols(), "Array subscript out of range."
  15. the1dArray = self._theRows[row]
  16. return the1dArray[col]
  17. def __setitem__( self, ndxTuple, value ):
  18. assert len(ndxTuple) == 2, "Invalid number of array subscripts."
  19. row = ndxTuple[0]
  20. col = ndxTuple[1]
  21. assert row >=0 and row < self.numRows() and col >=0 and col < self.numCols(), "Array subscript out of range."
  22. the1dArray = self._theRows[row]
  23. the1dArray[col] = value

数组Array的更多相关文章

  1. Javascript数组Array的forEach方法

    Javascript数组Array的forEach扩展方法 forEach是最常用到的数组扩展方法之一,相当于参数化循环数组,它简单的在数组的每一个元素上应用传入的函数,这也意味着只有存在的元素会被访 ...

  2. JavaScript 数组(Array)对象的方法

    JavaScript 数组(Array)对象的方法 concat() 描述:用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 原型:arrayObject.conc ...

  3. javascript数组Array强大的splice()方法

    javascript的Array数组提供了强大的splice()方法, 用于对数组元素的增删改 1.删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数) 删除: ...

  4. JavaScript 数组(Array)方法汇总

    数组(Array)常用方法; 数组常用的方法:concat(),every(), filter(), forEach(),  indexOf(), join(), lastIndexOf(), map ...

  5. JavaScript 数组(Array)对象

    Array 对象 Array 对象用于在单个的变量中存储多个值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, e ...

  6. JavaScript 数组-Array的方法总结

    JavaScript中的Array类型是经常用到的,Array类型也提供了很多方法能实现我们需求,下面我们来总结一下 一.创建Array的方法 1.使用Array构造函数 var colors=new ...

  7. javascript数组array

    注意:1.array的length不是只读的.可以从数组的末尾移出项或者向数组中添加新项.看下面例子: var colors = ["red","yellow" ...

  8. 测试JavaScript数组Array

    <script> var numbers = [1, 2, 3, 4, 5]; function isLessThan3(value,index,array) { var returnVa ...

  9. Javascript数组Array的方法总结!

    1.join() 将数组的元素组成一个字符串,以分隔符连接,如果省略则默认逗号为分隔符,该方法只接收一个参数:分隔符.此方法不会改变原数组. let arr = [1,2,3,4] let arr1 ...

  10. JavaScript 数组(Array)方法(二)

    forEach ES5新增的方法,Arr.forEach((value, index,array)=>{}); let arr=['a','b','c']; arr.forEach((val,i ...

随机推荐

  1. WPF 修改图片颜色

    原文:WPF 修改图片颜色 本文告诉大家如何修改图片的颜色,如去掉图片的蓝色 在 WPF 可以使用很多图片处理的方法,本文告诉大家的是一个图片处理,可以把处理的图片保存在文件. 在阅读本文,我假设大家 ...

  2. WinForm - 无边框窗体自定义移动

    为了界面的好看,有时候需要将窗体FormBorderStyle属性设为None,这样就可以根据自己的喜欢来设计界面.但这样窗体无法进行移动的.而且默认的窗体(FormBorderStyle=Sizab ...

  3. WPF Bind 绑定

    原文:WPF Bind 绑定 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/74332515 用过W ...

  4. 在vs code中使用dotnet watch run

    只需要在csproj文件中加入一行: <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App&quo ...

  5. 转义及编码(\u, \x)

    首先前面的 \表示转义, \x:只是 16 进制的意思,后边跟两位,则表示单字节编码: \d:十进制:\o:八进制: 对于 \xaa ⇒ chr(0xaa) ⇒ chr(16*a+a) \u:unic ...

  6. [bug系列]Method not found: 'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommandBuilderFactory

    bug由来 最近开始学习NetCore,想通过实战使用NetCore做一个集成数据库存储Redis缓存的WebApi项目,由于MSSQL的庞大体积,最终决定使用轻量级关系型数据库MySql. 所以最终 ...

  7. 第一个spring boot工程

    参考. 1. 碰到的问题: -出现bind:address already in use是因为当前项目正在运行,停掉当前项目即可.cmd中命令 netstat -nao 查看所有占用的端口及PID号, ...

  8. 2-17-MySQL读写分离-mysql-proxy

        实验环境: mysql-proxy服务端:        xuegod1              IP:192.168.10.31 mysql服务器(主,负责写)服务端:xuegod2    ...

  9. 【C#】list 去重

    原文:[C#]list 去重 Enumerable.Distinct 方法 是常用的LINQ扩展方法,属于System.Linq的Enumerable方法,可用于去除数组.集合中的重复元素,还可以自定 ...

  10. 获取bing图片并自动设置为电脑桌面背景(使用 URLDownloadToFile API函数)

    众所周知,bing搜索网站首页每日会更新一张图片,张张漂亮(额,也有一些不合我口味的),特别适合用来做电脑壁纸. 我们想要将bing网站背景图片设置为电脑桌面背景的通常做法是: 上网,搜索bing 找 ...