Python迭代2D数组__iter__

时间:2015-02-04 18:48:48

标签: python list class loops 2d

我正在尝试创建一个2D Array类,并希望使矩阵可迭代。有谁知道怎么做这个?我是python中的新手,并且仍然掌握着各种各样的东西。另外,如何在我的主要实现 str ?如果我只使用print(customMatrix)那么会使用 str 方法吗?

继承我正在做的事情。我知道其中有些不正确:)

class Array2D():
    def __init__(self, height, width):
        self._width = width
        self._height = height
        self.matrix = [[None]*height for _ in range(width)]

    def width(self):
        return self._width

    def height(self):
        return self._height

    def set(self, row, col, element):
        self.matrix[row][col] = element

    def get(self, row, col):
        return self.matrix[row][col]

    def row(self, row_no):
        rowList = []
        for item in self.matrix[row_no][item]:
            rowList.append(item)

    def column(self, col_no):
        colList = []
        for item in self.matrix[item][col_no]:
            colList.append(item)

    def __str__(self):
        #for row in self.matrix:
            #print (row)
        return (str(self.matrix))

    def __iter__(self):

2 个答案:

答案 0 :(得分:1)

def __iter__(self):
    for x in xrange(self.width):
         for y in xrange(self.height):
            yield self.matrix[x][y]

阅读生成器和yield关键字,它们很有趣!

答案 1 :(得分:1)

实际上有一个yield关键字在这种情况下很方便,它可以被认为是一个return语句,它在返回任何内容时保存以前的状态,所以当你调用方法时它首先产生{{1在第二次调用此方法时,它将生成self.matrix[0][0],依此类推..

self.matrix[0][1]