如何在Python中迭代2D矩阵?

如何在Python中迭代2D矩阵?,python,iteration,next,Python,Iteration,Next,我很难理解如何设置迭代代码,我将矩阵构建为列表列表 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): fo

我很难理解如何设置迭代代码,我将矩阵构建为列表列表

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): 
       yield from chain.from_iterable(zip(*(self.matrixRC or [])))

def __next__(self):
    return next(iter(self))
这应该起作用:

def __iter__(self): 
       yield from chain.from_iterable(zip(*(self.matrixRC or [])))

def __next__(self):
    return next(iter(self))

如果尺寸为N x M,其中N!=M?如果没有任何行/列怎么办?我想我们应该等待OP的更多信息:)谢谢!我仍然没有得到迭代,但我想我会在下一次找到它。谢谢@JayShankarGupta IDK-zip,但它看起来可以工作xd如果维度是N x M,其中N!=M?如果没有任何行/列怎么办?我想我们应该等待OP的更多信息:)谢谢!我仍然没有得到迭代,但我想我会在下一次解决。谢谢@JayShankarGupta IDK-zip,但它看起来是有效的。你能提供样本输入和输出吗?你能提供样本输入和输出吗?我不认为每件事都必须是一行:)我在这个答案的作者面前低头。我不认为每件事都必须是一行:)我在这个答案的作者面前低头。