# Boston Python Workshop 8/Loops

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

## For loops

Use a `for` loop to do something to every element in a list.

```>>> names = ["Jessica", "Adam", "Liz"]
>>> for name in names:
...     print(name)
...
Jessica
Liz```
```>>> names = ["Jessica", "Adam", "Liz"]
>>> for name in names:
...     print("Hello " + name)
...
Hello Jessica
Hello Liz```

### `if` statements inside `for` loop

```>>> for name in ["Alice", "Bob", "Cassie", "Deb", "Ellen"]:
...     if name[0] in "AEIOU":
...         print(name + " starts with a vowel.")
...
Alice starts with a vowel.
Ellen starts with a vowel.```

### Building up a list

Sometimes you want to build up a new list based on information about each element in an existing list. To do this, initialize an empty list before the `for` loop, and append elements to the new list inside the `for` loop:

```>>> vowel_names = []
>>> for name in ["Alice", "Bob", "Cassie", "Deb", "Ellen"]:
...     if name[0] in "AEIOU":
...         vowel_names.append(name)
...
>>> print(vowel_names)
['Alice', 'Ellen']```

### Using a counter

Sometimes you want to keep track of the number of occurrences of something, or a running total, as you loop through a list. To do this, initialize a variable before the `for` loop that you update inside the `for` loop:

```>>> prices = [1.5, 2.35, 5.99, 16.49]
>>> total = 0
>>> for price in prices:
...     total = total + price
...
>>> total
26.33```

### `for` loops inside `for` loops

You can put `for` loops inside `for` loops. The indentation dictates which `for` loop a line is in.

```>>> letters = ["a", "b", "c"]
>>> numbers = [1, 2, 3]
>>> for letter in letters:
...     for number in numbers:
...         print(letter * number)
...
a
aa
aaa
b
bb
bbb
c
cc
ccc```

The order of the `for` loops matters. Compare the above example with this one:

```>>> for number in numbers:
...     for letter in letters:
...         print(number * letter)
...
a
b
c
aa
bb
cc
aaa
bbb
ccc```

## Useful functions related to lists and for loops

#### sorting lists

Use `.sort()` to sort a list:

```>>> names = ["Eliza", "Joe", "Henry", "Harriet", "Wanda", "Pat"]
>>> names.sort()
>>> names
['Eliza', 'Harriet', 'Henry', 'Joe', 'Pat', 'Wanda']
```

#### Getting the maximum and minimum values from a list

```>>> numbers = [0, 3, 10, -1]
>>> max(numbers)
10
>>> min(numbers)
-1
```

#### Generating a list of numbers easily with `range()`

The `range()` function returns a list of numbers. This is handy for when you want to generate a list of numbers on the fly instead of creating the list yourself.

```>>> range(5)
[0, 1, 2, 3, 4]
```

Use `range` when you want to loop over a bunch of numbers in a list:

```>>> numbers = range(5)
>>> for number in numbers:
...     print(number * number)
...
0
1
4
9
16
```

We could rewrite the above example like this:

```>>> for number in range(5):
...     print(number * number)
...
0
1
4
9
16
```

### Get user input with `raw_input()`

```>>> for i in range(100):
...     input = raw_input("Please type something> ")
...     if input == "Quit":
...         print("Goodbye!")
...         break
...     else:
...         print("You said: " + input)
...