在 python 中,我试图编写一个支持两种不同类型的迭代器的类。粗略地说,这个对象包含一个数据矩阵,我想有两种不同的迭代器来支持行迭代和列迭代。
最佳答案
dict
有几个生成迭代器的方法——iterkeys
、itervalues
、iteritems
——所以应该你的类。如果有一种“最自然”的迭代方式,为了方便和可读性,您还应该将它别名为 __iter__
(可能是 iterrows
;当然总会有有一些疑问,就像我们设计它的迭代行为时 dict
一样,但合理的选择总比没有好。
例如,假设您的矩阵是正方形,被展平成行主列表 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
关于python - 一个python对象中的双迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1025348/