数组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的更多相关文章

  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. lzugis——Arcgis Server for JavaScript API在自己的定义InfoWindow

    你看到这个标题嫌烦.因为我最近一直与研究问题,相关文章使这些也可以只,同时要读我文章的朋友.我的文章能够给你带来帮助. 在相关的内部的前两篇文章,达到InfoWindow经div实现的东西,成Info ...

  2. 2 abp 领域层创建实体

    领域层: LearningMpaAbp.Core项目   基础服务层:EntityFramework对应的项目 1 在领域层新建Tasks文件夹 在文件夹下新建Task类 但是注意 Task类必须要继 ...

  3. HDU 4861(多校)1001 Couple doubi

    Problem Description DouBiXp has a girlfriend named DouBiNan.One day they felt very boring and decide ...

  4. A Byte of Python (for Python 3.0) 下载

    在线阅读:http://www.swaroopch.org/notes/Python_en:Table_of_Contents 英文版 下载地址1:http://files.swaroopch.com ...

  5. python 教程 第二章、 类型

    第二章. 类型 常量 5,1.23,9.25e-3,’This is a string’,”It’s a string!” 1) 数 整数:2 长整数: 浮点数:3.23,52.3E-4 复数:-5+ ...

  6. Font Awesome Text 使用方法

    <!-- basic text--> <com.beardedhen.androidbootstrap.FontAwesomeText android:layout_width=&q ...

  7. Qt翻译---Thread Support in Qt

    Thread Support in Qt QT提供线程支持在平台独立的线程类.一个安全线程的传递事件的方式,一个信号槽的链接在线程之中.这使得开发多线程容易.多线程程序也是一个有用的范例为不冻结用户界 ...

  8. Angular路由守卫 canActivate

    作用 canActivate 控制是否允许进入路由. canActivateChild 等同 canActivate,只不过针对是所有子路由. 关键代码 创建路由守卫 import { Injecta ...

  9. C 语言main 函数终极探秘(&& 的含义是:如果 && 前面的程序正常退出,则继续执行 && 后面的程序,否则不执行)

           所有的C程序必须定义一个称之为main的外部函数,这个函数是程序的入口,也就是当程序启动时所执行的第一个函数,当这个函数返回时,程序也将终止,并且这个函数的返回值被看成是程序成功或失败的 ...

  10. 【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...