while loop

Basic

Wait a second between actions.

import time while True: print("Hello") time.sleep(1) 

Fixed count

You can set up a while loop to act like a for loop with an incrementing counter, but a for loop is much neater for that.

But sometimes you are handling data and you donโ€™t know how many iterations to do. Like getting batches of 10 rows at a time from a database or REST API.

So you might do something like this:

resp = None while resp is None or resp.has_next_page is True: resp = do_request() 

while-else

Here with while-else such that the else block is executed if break is not applied. i.e. the loop exited because the expression became false.

while my_condition: do_stuff() if some_cond: break else: do_more_stuff() 

for loop

Basic

Iterate over an iterable:

for foo in foos: print(foo) 

See more specific examples below.

String

Chracters of a string.

for c in "abc": print(c) # a # b # c 

List, tuple, or set

my_items = ["abc", "def"] for x in my_items: print(x) # abc # def 

If you need both the index and the value:

for i, x in enumerate(my_items): print(i, x) # 0 abc # 1 def 

Please avoid using range to get the index of items in an a list and then get each item. I see people doing that because they are used to a C-style array.

i.e. Do not do this in Python. It is messier and slower:

my_items = ["abc", "def"] for i in range(len(my_items)): print(x[i]) # abc # def 

Range

Iterate over a series of numbers.

Note that zero start is implied and the upper value is excluded.

for i in range(5): print(i) # 0 # 1 # 2 # 3 # 4 

Set a minimum:

for i in range(1, 5): print(i) # 1 # 2 # 3 # 4 

Dictionaries

Iterating over a dictionary will unpack its keys. You can use my_dict or my_dict.keys() (to be more explicit), but it will be the same result.

my_dict = {"abc": 123, "def": 456} for k in my_dict.keys(): print(k) # abc # def 

If you need the values:

for v in my_dict.values(): print(v) 

If you need both the key and value, then unpack as tuples:

for k, v in my_dict.items(): print(k, v) # Same as: for i in my_dict.items(): k, v = i print(k, v) # Or: for i in my_dict.items(): print(i[0], i[1]) 

for-else

Here with for-else such that the else block is executed if break is not applied. i.e. the loop exited because the last item was reached.

for foo in foos: do_stuff() if some_cond: break else: do_more_stuff()