Related Article:
Transcript
You can use a for
loop to loop over any iterable (iter-able). Anything you're able to iterate over can be looped over with a for
loop.
Lists in Python are iterables. Here we have a variable favorite_fruits
that points to list of strings:
>>> favorite_fruits = ["jujube", "pear", "watermelon", "apple", "blueberry"]
We can loop over (aka "iterate over") this favorite_fruits
list using a for
loop:
>>> for fruit in favorite_fruits:
... print(fruit)
...
jujube
pear
watermelon
apple
blueberry
While executing that loop, Python takes each of the things inside of favorite_fruits
list and gives us access to each of those items in order, using the variable name fruit
. We're using that variable name to print each object (all strings in this case) out.
You can use this for anything that's iterable. An iterable is anything that can be looped over using a for
loop.
Looping using indexes, the wrong way (don't do this)
Sometimes people write their for
loops like this:
>>> for i in range(len(favorite_fruits)):
... print(favorite_fruits[i])
...
jujube
pear
watermelon
apple
blueberry
There's a couple of reasons I don't recommend this. The first one is that PEP 8, the official Python style guide, recommends against this. Another reason is this only works with sequences.
A sequence is an iterable that you can index (using square brackets) starting from 0 until 1 less than the length of the sequence. Strings, tuples, and lists are all examples of sequences. Sets, dictionaries, files, generators, and lots of other iterables are not sequences.
The biggest reason not to use this is that we're doing a lot of unnecessary work here. We're using range(len(favorite_fruits))
numbers, representing indexes, in the variable i
, and then using those indexes to then look each of the items up in our list. This extra work is like entering the backdoor of a building instead of the front door: you're still entering a door in either case but you have to walk much farther to go through the back door.
Not only that, but we're also focusing on the wrong thing: we're focusing on the index. We're giving a variable name, i
, to the index. We're not giving a variable name to the most important thing here: the actual item we're working with.
Python's for
loops don't have (or need) indexes
Python's for
loop gives a name to each of the actual items we're working with (fruit
in our case).
>>> for fruit in favorite_fruits:
... print(fruit)
...
jujube
pear
watermelon
apple
blueberry
If something is important, it deserves a name. Python's for
loops names the items themselves, not indexes.
Summary
When you're writing a for
loop in Python, keep it simple, keep it as simple as possible. If you do need to count upwards as you loop, the built-in enumerate
helper function can help you with that, and we can talk more about that later.
from Planet Python
via read more
No comments:
Post a Comment