如何引用上一次迭代的值?

时间:2019-01-31 22:24:23

标签: python

对于x的不同迭代,我尝试从当前值中减去前一个值,并在它们之间的差异足够小(可能为0.0001)之类的情况下停止循环。

尝试了几件事,例如将x表示为n的函数,但不确定如何做到这一点。

y=int(input('Enter number for cubed root:'))
x=1
N=0
D=0

while N < 50:
    x=1/3*(2*(x) + y/(x**2))
    N=N+1
    print('Estimation:',x)
    print()

    if x(N))==x(N+1):
        print('Difference negligible')
        break

2 个答案:

答案 0 :(得分:4)

我建议您使用其他变量来保存上一次循环迭代的值。

也许这对您有用:

previous_x = None
while N < 50:
    ...

    if previous_x is not None:
        if abs(x - previous_x) < 0.0001:
            print('Difference negligible')
            break

    previous_x = x

答案 1 :(得分:4)

您可以构建自己的迭代器函数,该函数返回当前值和下一个值。像下面这样的东西应该起作用:

def take_current_and_next(it):
    last = None
    for current in it:
        if last is not None:
            yield last, current
        last = current

values = list(range(6))

for current, next_ in take_current_and_next(values):
    print(current, next_)

给出:

0 1
1 2
2 3
3 4
4 5

如果您的迭代器可以返回None值,则上面的代码将无法正常工作。以下代码也应处理“无”值:

def take_current_and_next(it):
    it = iter(it)
    current = next(it)
    for next_ in it:
        yield current, next_
        current = next_