我无法绕过如何设置迭代代码,我将矩阵构建为列表列表
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]
。我真的无法直观地看到这个迭代代码是如何工作的(我复制的代码的一小部分)。
答案 0 :(得分:2)
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
答案 1 :(得分:1)
这应该有效:
def __iter__(self):
yield from chain.from_iterable(zip(*(self.matrixRC or [])))
def __next__(self):
return next(iter(self))