2
我想測試某個值是否屬於使用迭代器生成的數字序列。當然,當值確實屬於序列時,只要值滿足,就可以停止。但是當它不,我想這是問題出現時。測試迭代器是否生成某個值
但是可以使用附加信息(例如,序列正在增加)。
考慮斐波那契例如:
class FibonacciIterator(object):
def __init__(self):
self.mem = [0, 1]
def __next__(self):
curr = self.mem[0]
new = self.mem[0]+self.mem[1]
self.mem[0] = self.mem[1]
self.mem[1] = new
return curr
class Fibonacci(object):
def __iter__(self):
return FibonacciIterator()
如果一個測試8
是否屬於序列,然後一切都很好:
>>> fib = Fibonacci()
>>> 8 in fib
True
但是,如果一個測試10
(即不屬於然後
>>> 10 in fib
...
從不t erminates。但是可以通過觀察8
來自13
之後很容易地確定10
不在序列中,並且由於序列增加,所以必然not 10 in fib
。
在Python中是否有一個很好的方法來實現in
的這種行爲,以便10 in fib
終止?
可以提供__contains__'的'一個定義,知道該序列是單調遞增的。但是,對於一個生成器,'__contains__'會消耗序列,所以它可能不是特別有用。 – chepner
似乎是一個問題,如果你沒有測試天氣,那麼這個數字已經超過了輸入 – VIPER
@chepner的確如此:在我上面的例子中迭代器被消耗的事實並不是什麼大問題,因爲我會在其中定義'__contains__'每次使用'in'時使用'Fibonacci'類(「迭代器」)來生成一個新的'FibonacciIterator'(「迭代器」) –