One way to iterate over a list is by index.

```
for i in range(len(my_list):
print (my_list[i])
```

The other way is to iterate over the values…

```
for value in my_list:
print (value)
```

We may combine both forms in a single loop using the `enumerate`

built-in. This will iterate over both index and value…

```
for i, x in enumerate(my_list): # i is the index, x is the value
print ("[{}] => {}".format(i, x))
```

To review,

```
range(start, end, stride)
```

Eg.

```
my_list = [1,1,2,3,5,8,13,21,34,55]
```

Excluding zero as the first term, the above is the first ten terms of a Fibonacci sequence. We know it is ten terms because,

```
len(my_list) => 10
```

To iterate over this list by index, we would write,

```
for i in range(len(my_list)):
```

A range covers an interval from start to end, but not including the very last value. The default difference between terms (stride) is 1 and the default starting value is 0. This works great with lists since they are *zero-indexed*.

```
range(len(my_list)) => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```

Notice there are still ten elements in the list of integers? (`range()`

can only work with integers.)