我正在尝试为类似以下内容(从原问题简化而来)编写迭代器:
import numpy as np
class IterableNumber:
def __init__(self, digits):
self.digits = digits
self.zero_indices = np.where(digits == 0)[0]
def __iter__(self):
return self
def next(self):
# For each index in self.zero_indices, loop 1 through 9?
pass
# Other methods omitted
IterableNumber接受一个数字数组,但数字'0'表示通配符。当我遍历此对象时,我希望每个'0'位数循环1到9的范围,即
num = IterableNumber(np.array([5, 5, 0, 5, 0]))
for digits in num:
print digits
应该打印
[5, 5, 1, 5, 1]
[5, 5, 1, 5, 2]
...
[5, 5, 1, 5, 9]
[5, 5, 2, 5, 1]
[5, 5, 2, 5, 2]
...
...
[5, 5, 9, 5, 9]
针对一般情况编写此迭代器似乎需要递归来处理嵌套循环的可变数量(每个0都对应一个循环),就像本站上的其他帖子建议的那样。但是,在next()函数的上下文中如何编写这样的递归函数呢?或者也许有另一种解决这个问题的方法?任何见解都将不胜感激:)
如果相关,则我使用的是Python 2.7.3。
itertools.product
是否可以推广?一个愚蠢的例子是,所有偶数索引我想要range(0, 10, 2)
,而所有奇数索引则是range(10)
? - xph[5, 0, 0]
,我希望输出为:[5, 0, 0]
[5, 0, 2]
...[5, 0, 8]
[5, 1, 0]
...[5, 2, 0]
... - xph