我想测试某个值是否属于使用迭代器生成的数字序列。当然,当值不属于序列时,只要满足该值就可以停止。但当它不存在的时候,我想问题就出现了。你知道吗
但是,可以使用附加信息(例如,序列正在增加)。你知道吗
以斐波那契为例:
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
...
永不终止。但是我们可以通过观察8
之后是13
,很容易确定10
不在序列中,因为序列在增加,所以必然是not 10 in fib
。你知道吗
Python中有没有一种好的方法来实现in
的这种行为,以便10 in fib
终止?你知道吗
简单的解决方案是实现一个^{} 方法,该方法只迭代迭代器的一个副本:
然而,还有另一种方法来确定一个数是否是斐波那契数:如果
(5*n**2 + 4)
或(5*n**2 – 4)
或两者都是完美平方(整数的平方)。你知道吗我将使用来自this answer的方法来实现
is_square
函数:相关问题 更多 >
编程相关推荐