一个python对象中的双迭代器

2 python iterator

在python中,我试图编写一个支持两种不同类型迭代器的类.粗略地说,这个对象包含一个数据矩阵,我希望有两种不同类型的迭代器来支持行迭代和列迭代.

Ale*_*lli 5

dict有几个迭代器的生产方法- ,,iterkeys -所以如果你的类.如果有一种"最自然"的迭代方式,你也应该为了方便和可读性而对其进行别名(这可能会是这样;当然总会有一些疑问,就像我们设计迭代行为时一样,但合理的选择总比没有好.itervaluesiteritems__iter__iterrowsdict

例如,假设您的矩阵是方形的,保持扁平化为行主列表self.data,其中一侧为self.n.然后:

def iterrows(self):
  start = 0
  n = self.n
  data = self.data
  while start < n*n:
    stop = start + n
    yield data[start:stop]
    start = stop

def itercols(self):
  start = 0
  n = self.n
  data = self.data
  while start < n:
    yield data[start::n]
    start += 1

__iter__ = iterrows
Run Code Online (Sandbox Code Playgroud)