python - 一个python对象中的双迭代器

标签 python iterator

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

最佳答案

dict 有几个生成迭代器的方法——iterkeysitervaluesiteritems——所以应该你的类。如果有一种“最自然”的迭代方式,为了方便和可读性,您还应该将它别名为 __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/

相关文章:

python - 元类单例对象中的析构函数

python - Tensorflow - 训练后检索训练后的前馈神经网络的权重/偏差

java - 如何在Struts迭代器标签中添加条件?

c++ - Armadillo 中 SpMat<Type> 的迭代器是否只访问非零条目?

java - java.util.Map 条目集的问题

java - 使用 ListIterator 设置一个整数

python - Bokeh - 将线条图案填充添加到绘图中

python - 查找输入中连续的空白字符

python - pip 安装选项不清楚

java - Iterator for Java Framework Collection 的不同结果