Python 迭代二维数组 __iter__

标签 python list class loops 2d

我正在尝试创建一个二维数组类并希望使矩阵可迭代。有谁知道该怎么做?我是 python 类(class)的新手,但仍在掌握窍门。另外,如何在我的 main 中实现 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):

最佳答案

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

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):
    return_str = ""
    for i in xrange(self._height):
        for j in xrange(self._width):
            return_str+=str(self.matrix[i][j])+"    " #4 space between each element
        return_str+="\n"
    return return_str

    def __iter__(self):
        for i in xrange(self._height):
            for j in xrange(self._width):
                yield self.matrix[i][j]

关于Python 迭代二维数组 __iter__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28329074/

相关文章:

python - 在保持项目排序的同时从列表中获取随机样本?

java - hashCode() 和 equals() 与 Class<T>

python - 使用Python类进行封装,而不是实例化

python - 二维数组的 numpy in1d 实现?

python - webelement.text 不起作用(浏览器 = webdriver.Firefox)

python - [pandas.read_csv(filename)] 和 [pandas.DataFrame.from_csv(filename)] 有什么区别

python - 在 Pandas 中分隔和堆叠列(Python 3.4)

c# - 根据键对字典列表进行排序

python - 在带数字的列表中查找按字母顺序排列的第一项

c++ - 在C++类中执行while循环