# Iteration¶

Our other aspect of control is looping back on ourselves.

We use forin to “iterate” over lists:

mylist = [3, 7, 15, 2]

for whatever in mylist:
print(whatever ** 2)

9
49
225
4


Each time through the loop, the variable in the value slot is updated to the next element of the sequence.

## Iterables¶

Any sequence type is iterable:

vowels = "aeiou"
sarcasm = []

for letter in "Okay":
if letter.lower() in vowels:
repetition = 3
else:
repetition = 1

sarcasm.append(letter * repetition)

"".join(sarcasm)

'OOOkaaay'


The above is a little puzzle, work through it to understand why it does what it does.

### Dictionaries are Iterables¶

All sequences are iterables. Some iterables (things you can for loop over) are not sequences (things with you can do x[5] to), for example sets and dictionaries.

import datetime

now = datetime.datetime.now()

founded = {"James": 1976, "UCL": 1826, "Cambridge": 1209}

current_year = now.year

for thing in founded:
print(thing, "is", current_year - founded[thing], "years old.")

James is 46 years old.
UCL is 196 years old.
Cambridge is 813 years old.


## Unpacking and Iteration¶

Unpacking can be useful with iteration:

triples = [[4, 11, 15], [39, 4, 18]]

for whatever in triples:
print(whatever)

[4, 11, 15]
[39, 4, 18]

for first, middle, last in triples:
print(middle)

11
4

# A reminder that the words you use for variable names are arbitrary:
for hedgehog, badger, fox in triples:

11
4


for example, to iterate over the items in a dictionary as pairs:

things = {
"James": [1976, "Kendal"],
"UCL": [1826, "Bloomsbury"],
"Cambridge": [1209, "Cambridge"],
}

print(things.items())

dict_items([('James', [1976, 'Kendal']), ('UCL', [1826, 'Bloomsbury']), ('Cambridge', [1209, 'Cambridge'])])

for name, year in founded.items():
print(name, "is", current_year - year, "years old.")

James is 46 years old.
UCL is 196 years old.
Cambridge is 813 years old.


## Break, Continue¶

• Continue skips to the next turn of a loop

• Break stops the loop early

for n in range(50):
if n == 20:
break
if n % 2 == 0:
continue
print(n)

1
3
5
7
9
11
13
15
17
19


These aren’t useful that often, but are worth knowing about. There’s also an optional else clause on loops, executed only if you don’t break, but I’ve never found that useful.

## Classroom exercise: the Maze Population¶

Take your maze data structure. Write a program to count the total number of people in the maze, and also determine the total possible occupants.