gpt4 book ai didi

Python 迭代二维数组 __iter__

转载 作者:行者123 更新时间:2023-12-01 04:51:35 24 4
gpt4 key购买 nike

我正在尝试创建一个二维数组类并希望使矩阵可迭代。有谁知道该怎么做?我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com