AlanK
AlanK

Reputation: 9853

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)

Upvotes: 5

Views: 21740

Answers (2)

Vincent Savard
Vincent Savard

Reputation: 35947

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)

Upvotes: 3

user2357112
user2357112

Reputation: 281958

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
    ...

Upvotes: 14

Related Questions