簡體   English   中英

Python迭代2D數組__iter__

[英]Python Iterate 2D array __iter__

我正在嘗試創建2D Array類,並希望使矩陣可迭代。 有人知道該怎么做嗎? 我是python類的新手,仍然會遇到很多麻煩。 另外, str如何在我的main中實現? 如果我只是使用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):
def __iter__(self):
    for x in xrange(self.width):
         for y in xrange(self.height):
            yield self.matrix[x][y]

閱讀生成器和yield關鍵字,它們很有趣使用!

實際上,在這種情況下有一個yield關鍵字很方便,可以將其視為返回語句,它在返回任何內容時保存先前的狀態,因此,當您調用該方法時,它首先產生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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM