如何迭代 Python 中的二维矩阵?
How to iterate over a 2D matrix in Python?
我在思考如何设置迭代代码时遇到了麻烦,我构建了一个矩阵作为列表的列表
for _ in range(rowsLen):
self.matrixRC.append([2 for _ in range(collsLen)])
我现在的迭代代码以错误的方式迭代。
def __iter__(self):
for i in self.matrixRC:
for j in i:
yield j
def __next__(self):
for i in self.matrixRC:
for j in i:
return j
通过以错误的方式迭代我的意思是它首先显示 matrixRC[0][0]
然后 matrixRC[0][1]
等的值,但我希望它显示 matrixRC[0][0]
然后 matrixRC[1][0]
或者如果它已经显示 matrixRC[0][0]
然后 matrixRC[1][0]
那么我希望它显示 matrixRC[0][0]
然后 matrixRC[0][1]
。我真的很难想象这个迭代代码是如何工作的(我复制的代码的少数部分之一)。
def __iter__(self):
for i in zip(*self.matrixRC):
for j in i:
yield j
def __next__(self):
for i in zip(*self.matrixRC):
for j in i:
return j
这应该有效:
def __iter__(self):
yield from chain.from_iterable(zip(*(self.matrixRC or [])))
def __next__(self):
return next(iter(self))
我在思考如何设置迭代代码时遇到了麻烦,我构建了一个矩阵作为列表的列表
for _ in range(rowsLen):
self.matrixRC.append([2 for _ in range(collsLen)])
我现在的迭代代码以错误的方式迭代。
def __iter__(self):
for i in self.matrixRC:
for j in i:
yield j
def __next__(self):
for i in self.matrixRC:
for j in i:
return j
通过以错误的方式迭代我的意思是它首先显示 matrixRC[0][0]
然后 matrixRC[0][1]
等的值,但我希望它显示 matrixRC[0][0]
然后 matrixRC[1][0]
或者如果它已经显示 matrixRC[0][0]
然后 matrixRC[1][0]
那么我希望它显示 matrixRC[0][0]
然后 matrixRC[0][1]
。我真的很难想象这个迭代代码是如何工作的(我复制的代码的少数部分之一)。
def __iter__(self):
for i in zip(*self.matrixRC):
for j in i:
yield j
def __next__(self):
for i in zip(*self.matrixRC):
for j in i:
return j
这应该有效:
def __iter__(self):
yield from chain.from_iterable(zip(*(self.matrixRC or [])))
def __next__(self):
return next(iter(self))