Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using enumerate function in while loops

I have several mathematical algorithms that use iteration to search for the right answer. Here is one example:

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

I want to count how many times the algorithm goes through the loop to get a and b. However this is not a for function and it isn't a list, so I can't clearly indicate what objects do I want to count if I use enumerate. Is there a way to count those loops?

Note: I am not trying to change the code itself. I am really searching for a way to count iterations in a while loop, which I can then use for other cases.

like image 361
L.R. Avatar asked Apr 11 '15 10:04

L.R.


2 Answers

The simplest answer if you need a counter outside of a for loop is to count manually using a simple variable and addition inside your while loop:

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

There is an alternative case - if each step of your iteration has a meanigful value to yield, you may want your loop to be a generator, and then use for loop and enumerate(). This makes most sense where you care about which step you are on, not just the count at the end. E.g:

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

for count, step_value in enumerate(produce_steps()):
    ...
like image 115
Gareth Latty Avatar answered Sep 29 '22 20:09

Gareth Latty


For a counter I use count from itertools:

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

and so on...

Syntax

count(start=0, step=1)

Docs

Make an iterator that returns evenly spaced values starting with number start.

Ref. itertools.count

like image 20
itzMEonTV Avatar answered Sep 29 '22 18:09

itzMEonTV