= ['living room', 'was', 'quite', 'large']
tokens
for tok in tokens:
print(tok)
living room
was
quite
large
Purpose - Define iterables and iterators - Using two methods, show how iterators can be used to return data from sets, lists, strings, tuples, dicts: - for
loops
- iter()
and next()
Specific Topics - iterable objects or iterables - iterators - iteration - sequence - collection
Iterable objects or iterables can return elements one at a time.
An iterator is an object that iterates over iterable objects such as sets, lists, tuples, dictionaries, and strings.
Iteration can be implemented: - with a for
loops - with the next()
method
Next, we show examples for various iterables.
for
= ['living room', 'was', 'quite', 'large']
tokens
for tok in tokens:
print(tok)
living room
was
quite
large
iter()
and next()
iter()
gets an iterator. Pops out a value each time it’s used.
next()
gets the next item from the iterator
= ['living room','was','quite','large']
tokens = iter(tokens)
myit print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
living room
was
quite
large
Calling next()
when the iterator has reached the end of the list produces an exception:
print(next(myit))
StopIteration:
Next, look at the type of the iterator, and the documentation
type(myit)
list_iterator
# help(myit)
help(next)
Help on built-in function next in module builtins:
next(...)
next(iterator[, default])
Return the next item from the iterator. If default is given and the iterator
is exhausted, it is returned instead of raising StopIteration.
Note that for
implicitly creates an iterator and executes next()
on each loop iteration. This is best way to iterate through a list-like object.
We iterated over a list. Next we will illustrate for other iterables: str
, tuple
, set
, dict
lists, tuples, and strings are sequences. Sequences are designed so that elements come out of them in the same order they were put in.
Sets and dictionaries are not sequences, since they don’t keep elements in order. They are called collections. The ordering of the items is arbitrary.
NOTE: This has changed for dictionaries in Python 3.7: > the insertion-order preservation nature of dict objects has been declared to be an official part of the Python language spec.
– What’s New in Python 3.7
iterating using for
= {'belle','cinderella','rapunzel'}
princesses
for princess in princesses:
print(princess)
cinderella
belle
rapunzel
iterating using iter()
and next()
= {'belle','cinderella','rapunzel'}
princesses
= iter(princesses) # note: set has no notion of order
myset print(next(myset))
print(next(myset))
print(next(myset))
cinderella
belle
rapunzel
iterating using for
= 'data'
strn
for s in strn:
print(s)
d
a
t
a
iterating using iter()
and next()
= iter(strn)
st
print(next(st))
print(next(st))
print(next(st))
print(next(st))
d
a
t
a
iterating using for
= ('auc','recall','precision','support')
metrics
for met in metrics:
print(met)
auc
recall
precision
support
iterating using iter()
and next()
= ('auc','recall','precision','support')
metrics
= iter(metrics)
tup_metrics print(next(tup_metrics))
print(next(tup_metrics))
print(next(tup_metrics))
print(next(tup_metrics))
auc
recall
precision
support
iterating using for
= {'fall':['regression','python'], 'spring':['capstone','pyspark','nlp']} courses
# iterate over keys
for k in courses:
print(k)
fall
spring
# iterate over keys, using keys() method
for k in courses.keys():
print(k)
fall
spring
# iterate over values
for v in courses.values():
print(v)
['regression', 'python']
['capstone', 'pyspark', 'nlp']
# iterate over keys and values using `items()`
for k, v in courses.items():
print(f"{k}:\t{', '.join(v)}")
fall: regression, python
spring: capstone, pyspark, nlp
Alternatively, keys and values can be extracted from the dict by: - looping over the keys - extract the value by indexing into the dict with the key
# iterate over keys and values using `key()`.
for k in courses.keys():
print(f"{k}:\t{', '.join(courses[k])}") # index into the dict with the key
fall: regression, python
spring: capstone, pyspark, nlp
iterating using for
If you just want to iterate for a known number of times, use range()
.
for i in range(10):
print(str(i+1).zfill(2), (i+1)**2 * '|')
01 |
02 ||||
03 |||||||||
04 ||||||||||||||||
05 |||||||||||||||||||||||||
06 ||||||||||||||||||||||||||||||||||||
07 |||||||||||||||||||||||||||||||||||||||||||||||||
08 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
09 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enumerate()
Very often you will want to know iteration number you are on in a loop.
This can be used to name files or dict keys, for example.
enumerate()
will return the index and key for each iteration.
courses
{'fall': ['regression', 'python'], 'spring': ['capstone', 'pyspark', 'nlp']}
for i, semester in enumerate(courses):
= f"{str(i).zfill(2)}_{semester}:\t{'-'.join(courses[semester])}"
course_name print(course_name)
00_fall: regression-python
01_spring: capstone-pyspark-nlp
Iterations can be nested!
This works well with nested data structures, like dicts within dicts.
This is basically how JSON
files are handled, BTW.
Be careful, though – these can get deep and complicated.
for i, semester in enumerate(courses):
print(f"{i+1}. {semester.upper()}:")
for j, course in enumerate(courses[semester]):
print(f"\t{i+1}.{j+1}. {course}")
1. FALL:
1.1. regression
1.2. python
2. SPRING:
2.1. capstone
2.2. pyspark
2.3. nlp
iterating using iter()
and next()