Python 迭代二维数组 __iter__
Python Iterate 2D array __iter__
我正在尝试创建一个二维数组 class 并希望使矩阵可迭代。有谁知道该怎么做?我是 python 中 classes 的新手,但仍然掌握了一些技巧。另外, 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
关键字在这种情况下很方便,它可以被认为是一个 return 语句,它在 returning 任何东西时保存以前的状态,所以当您调用该方法时,它首先产生 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]
我正在尝试创建一个二维数组 class 并希望使矩阵可迭代。有谁知道该怎么做?我是 python 中 classes 的新手,但仍然掌握了一些技巧。另外, 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
关键字在这种情况下很方便,它可以被认为是一个 return 语句,它在 returning 任何东西时保存以前的状态,所以当您调用该方法时,它首先产生 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]