代码之家  ›  专栏  ›  技术社区  ›  Brendan Mesters

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

  •  0
  • Brendan Mesters  · 技术社区  · 6 年前

    我在思考如何设置迭代代码时遇到了困难,我将矩阵构建为列表列表

    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] 等等,但我想让它显示出来 矩阵rc[0][0] 然后 matrixRC[1][0]

    或者如果已经显示 矩阵rc[0][0] 然后 matrixRC[1][0] 那么我想让它显示出来 矩阵rc[0][0] 然后 矩阵rc[0][1] . 我真的很难想象这个迭代代码是如何工作的(我复制的代码的少数部分之一)。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Jay Shankar Gupta    6 年前
    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
    
        2
  •  1
  •   Reut Sharabani    6 年前

    这应该可以:

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