Loops All Versions
Python 2.x
Python 3.x
This draft deletes the entire topic.
Introduction
As one of the most basic functions in programming, loops are an important piece to nearly every programming language. Loops enable developers to set certain portions of their code to repeat through a number of loops which are referred to as iterations. This topic covers using multiple types of loops and applications of loops in Python.
Examples
-
break
statementWhen a
break
statement executes inside a loop, control flow "breaks" out of the loop immediately:i = 0 while i < 7: print(i) if i == 4: print("Breaking from loop") break i += 1
The loop conditional will not be evaluated after the
break
statement is executed. Note thatbreak
statements are only allowed inside loops, syntactically. Abreak
statement inside a function cannot be used to terminate loops that called that function.Executing the following prints every digit until number
4
when thebreak
statement is met and the loop stops:0 1 2 3 4 Breaking from loop
break
statements can also be used insidefor
loops, the other looping construct provided by Python:for i in (0, 1, 2, 3, 4): print(i) if i == 2: break
Executing this loop now prints:
0 1 2
Note that 3 and 4 are not printed since the loop has ended.
If a loop has an
else
clause, it does not execute when the loop is terminated through abreak
statement.continue
statementA
continue
statement will skip to the next iteration of the loop bypassing the rest of the current block but continuing the loop. As withbreak
,continue
can only appear inside loops:for i in (0, 1, 2, 3, 4, 5): if i == 2 or i == 4: continue print(i) 0 1 3 5
Note that
2
and4
aren't printed, this is becausecontinue
goes to the next iteration instead of continuing on toprint(i)
wheni == 2
ori == 4
.Nested Loops
break
andcontinue
only operate on a single level of loop. The following example will only break out of the innerfor
loop, not the outerwhile
loop:while True: for i in range(1,5): if i == 2: break # Will only break out of the inner loop!
Python doesn't have the ability to break out of multiple levels of loop at once -- if this behavior is desired, refactoring one or more loops into a function and replacing
break
withreturn
may be the way to go.Use
return
from within a function as abreak
The
return
statement exits from a function, without executing the code that comes after it.If you have a loop inside a function, using
return
from inside that loop is equivalent to having abreak
as the rest of the code of the loop is not executed (note that any code after the loop is not executed either):def break_loop(): for i in range(1, 5): if (i == 2): return(i) print(i) return(5)
If you have nested loops, the
return
statement will break all loops:def break_all(): for j in range(1, 5): for i in range(1,4): if i*j == 6: return(i) print(i*j)
will output:
1 # 1*1 2 # 1*2 3 # 1*3 4 # 1*4 2 # 2*1 4 # 2*2 # return because 2*3 = 6, the remaining iterations of both loops are not executed
-
for
loops iterate over a collection of items, such aslist
ordict
, and run a block of code with each element from the collection.for i in [0, 1, 2, 3, 4]: print(i)
The above
for
loop iterates over a list of numbers.Each iteration sets the value of
i
to the next element of the list. So first it will be0
, then1
, then2
, etc. The output will be as follow:0 1 2 3 4
range
is a function that returns a series of numbers under an iterable form, thus it can be used infor
loops:for i in range(5): print(i)
gives the exact same result as the first
for
loop. Note that5
is not printed as the range here is the first five numbers counting from0
.Iterable objects and iterators
for
loop can iterate on any iterable object which is an object which defines a__getitem__
or a__iter__
function. The__iter__
function returns an iterator, which is an object with anext
function that is used to access the next element of the iterable. -
-
To iterate through a list you can use
for
:for x in ['one', 'two', 'three', 'four']: print(x)
This will print out the elements of the list:
one two three four
Generated numbers using
range
is also gives a list as an output.for x in xrange(1, 6): print(x)
Result will not be in a list.
1 2 3 4 5
If you want to loop though both the elements of a list and have an index for the elements as well, you can use python's excellent
enumerate
function:for index, item in enumerate(['one', 'two', 'three', 'four']): print(index, '::', item)
enumerate
will generate tuples, which are unpacked intoindex
(an integer) anditem
(the actual value from the list). The above loop will print(0, '::', 'one') (1, '::', 'two') (2, '::', 'three') (3, '::', 'four')
Iterate over a list with value manipulation using
map
andlambda
, i.e. apply lambda function on each element in the list:x = map(lambda e : e.upper(), ['one', 'two', 'three', 'four']) print(x)
Output:
['ONE', 'TWO', 'THREE', 'FOUR'] # python 2.x
NB: in Python 3.x
map
returns an iterator instead of a list so you in case you need a list you have to cast the resultprint(list(x))
. -
The
for
andwhile
compound statements (loops) can optionally have anelse
clause (in practice, this usage is fairly rare).The
else
clause only executes after afor
loop terminates by iterating to completion, or after awhile
loop terminates by its conditional expression becoming false.for i in range(3): print(i) else: print('done') i = 0 while i < 3: print(i) i += 1 else: print('done')
output:
0 1 2 done
The
else
clause does not execute if the loop terminates some other way (through abreak
statement or by raising an exception):for i in range(2): print(i) if i == 1: break else: print('done')
output:
0 1
Most other programming languages lack this optional
else
clause of loops. The use of the keywordelse
in particular is often considered confusing.The original concept for such a clause dates back to Donald Knuth and the meaning of the
else
keyword becomes clear if we rewrite a loop in terms ofif
statements andgoto
statements from earlier days before structured programming or from a lower-level assembly language.For example:
while loop_condition(): ... if break_condition(): break ...
is equivalent to:
# pseudocode <<start>>: if loop_condition(): ... if break_condition(): goto <<end>> ... goto <<start>> <<end>>:
These remain equivalent if we attach an
else
clause to each of them.For example:
while loop_condition(): ... if break_condition(): break ... else: print('done')
is equivalent to:
# pseudocode <<start>>: if loop_condition(): ... if break_condition(): goto <<end>> ... goto <<start>> else: print('done') <<end>>:
A
for
loop with anelse
clause can be understood the same way. Conceptually, there is a loop condition that remains True as long as the iterable object or sequence still has some remaining elements. -
Considering the following dictionary:
d = {"a": 1, "b": 2, "c": 3}
To iterate through its keys, you can use:
for key in d: print(key)
Output:
"a" "b" "c"
This is equivalent to:
for key in d.keys(): print(key)
or in Python 2:
for key in d.iterkeys(): print(key)
To iterate through its values, use:
for value in d.values(): print(value)
Output:
1 2 3
To iterate through its keys and values, use:
for key, value in d.items(): print(key, "::", value)
Output:
a :: 1 b :: 2 c :: 3
Note that in Python 2,
.keys()
,.values()
and.items()
return alist
object. If you simply need to iterate trough the result, you can use the equivalent.iterkeys()
,.itervalues()
and.iteritems()
.Note also that in Python 3, Order of items printed in the above manner does not follow any order.
-
Suppose we have declared a list named
lst
:lst = ['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten'];
We can iterate the whole list like this:
for x in lst: #do something with x
Or like this:
for x in range(len(lst)): #do something with lst[x]
Now, if we want to iterate
Four
[index 3] toEight
[index 7], then we have to iterate through index[0-based] like below:for x in range(3,8): #do something with lst[x] #lst[x] would be 'Four', 'Five', 'Six', 'Seven' and 'Eight'
Or alternatively use a slice of lst as below:
for x in lst[3:8]: # x will be 'Four', 'Five', 'Six', 'Seven' and 'Eight' as before.
If we have to do something with the values
Two
[index 1] toSeven
[index 6] skipping one after taking one each time, then we could do the following:for x in range(1,7,2): #do something with lst[x] #lst[x] would be 'Two', 'Four' and 'Six'
-
pass
is a null statement for when a statement is required by Python syntax (such as within the body of afor
orwhile
loop), but no action is required or desired by the programmer. This can be useful as a placeholder for code that is yet to be written.for x in range(10): pass #we don't want to do anything, or are not ready to do anything here, so we'll pass
In this example, nothing will happen. The
for
loop will complete without error, but no commands or code will be actioned.pass
allows us to run our code successfully without having all commands and action fully implemented.Similarly,
pass
can be used inwhile
loops, as well as in selections and function definitions etc.while x == y: pass
-
A
while
loop will cause the loop statements to be executed until the loop condition is falsey. The following code will execute the loop statements a total of 4 times.i = 0 while i < 4: #loop statements i = i + 1
While the above loop can easily be translated into a more elegant
for
loop,while
loops are useful for checking if some condition has been met. The following loop will continue to execute untilmyObject
is ready.myObject = anObject() while myObject.isNotReady(): myObject.tryToGetReady()
while
loops can also run without a condition by using numbers (complex or real) orTrue
:import cmath complex_num = cmath.sqrt(-1) while complex_num: # You can also replace complex_num with any number, True or a value of any type print(complex_num) # Prints 1j forever
If the condition is always true the while loop will run forever (infinite loop) if it is not terminated by a break or return statement or an exception.
while True: print "Infinite loop" # Infinite loop # Infinite loop # Infinite loop # ...
Topic Outline
Introduction
- Break and Continue in Loops
- For loops
- Iterating over lists
- Loops with an "else" clause
- Iterating over dictionaries
- Iterating different portion of a list with different step size
- The Pass Statement
- While Loop
Syntax
Parameters
Sign up or log in
Save edit as a guest
Join Stack Overflow
Using Google
Using Facebook
Using Email and Password
We recognize you from another Stack Exchange Network site!
Join and Save Draft