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

时间:2018-02-21 13:01:50

标签: 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): 
    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]。我真的无法直观地看到这个迭代代码是如何工作的(我复制的代码的一小部分)。

2 个答案:

答案 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))