在while循环中使用枚举函数

时间:2015-04-11 10:20:02

标签: python loops count

我有几种使用迭代来搜索正确答案的数学算法。这是一个例子:

def Bolzano(fonction, a, b, tol=0.000001):
    while abs(b - a) > tol:
        m = (a + b) / 2
        if sign(fonction(m)) == sign(fonction(a)):
            a = m
        else:
            b = m
    return a, b

我想计算算法通过循环获取 a b 的次数。但是,这不是for函数,它不是一个列表,因此如果我使用enumerate,我无法清楚地指出我想要计算的对象。有没有办法计算这些循环?

注意:我不是要尝试更改代码本身。我正在寻找一种计算while循环迭代的方法,然后我可以将其用于其他情况。

2 个答案:

答案 0 :(得分:6)

对于计数器,我使用count中的itertools

from itertools import count
c = count(1)
>>>next(c)
1
>>>next(c)
2

依旧......

<强>语法

count(start=0, step=1)

<强>文档

  

创建一个迭代器,返回以。开头的均匀间隔值   号码开始。

参考。 itertools.count

答案 1 :(得分:4)

如果您需要for循环之外的计数器,最简单的答案是使用简单变量手动计数并在while循环中添加:

count = 0
while condition:
    ...
    count += 1

还有另一种情况 - 如果迭代的每个步骤都具有yield的平均值,您可能希望循环为generator,然后使用for循环和enumerate()。在你关心自己走向哪一步,而不仅仅是最后的计数时,这是最有意义的。 E.g:

def produce_steps():
    while condition:
        ...
        yield step_value

for count, step_value in enumerate(produce_steps()):
    ...