Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Count iterations in while loop

Is there a way in Python to automatically add an iteration counter to a while loop?

I'd like to remove the lines count = 0 and count += 1 from the following code snippet but still be able to count the number of iterations and test against the boolean elapsed < timeout:

import time

timeout = 60
start = time.time()

count = 0
while (time.time() - start) < timeout:
    print 'Iteration Count: {0}'.format(count)
    count += 1
    time.sleep(1)
like image 673
AK47 Avatar asked Jul 27 '16 18:07

AK47


2 Answers

The cleanest way is probably to convert this to an infinite for loop and move the loop test to the start of the body:

import itertools

for i in itertools.count():
    if time.time() - start >= timeout:
        break
    ...
like image 88
user2357112 supports Monica Avatar answered Oct 27 '22 14:10

user2357112 supports Monica


You could instead move the while loop to a generator and use enumerate:

import time

def iterate_until_timeout(timeout):
    start = time.time()

    while time.time() - start < timeout:
        yield None

for i, _ in enumerate(iterate_until_timeout(10)):
    print "Iteration Count: {0}".format(count)
    time.sleep(1)
like image 42
Vincent Savard Avatar answered Oct 27 '22 15:10

Vincent Savard