Python Language Iterating different portion of a list with different step size


Example

Suppose you have a long list of elements and you are only interested in every other element of the list. Perhaps you only want to examine the first or last elements, or a specific range of entries in your list. Python has strong indexing built-in capabilities. Here are some examples of how to achieve these scenarios.

Here's a simple list that will be used throughout the examples:

lst = ['alpha', 'bravo', 'charlie', 'delta', 'echo']

Iteration over the whole list

To iterate over each element in the list, a for loop like below can be used:

for s in lst:
    print s[:1] # print the first letter

The for loop assigns s for each element of lst. This will print:

a
b
c
d
e

Often you need both the element and the index of that element. The enumerate keyword performs that task.

for idx, s in enumerate(lst):
    print("%s has an index of %d" % (s, idx))

The index idx will start with zero and increment for each iteration, while the s will contain the element being processed. The previous snippet will output:

alpha has an index of 0
bravo has an index of 1
charlie has an index of 2
delta has an index of 3
echo has an index of 4

Iterate over sub-list

If we want to iterate over a range (remembering that Python uses zero-based indexing), use the range keyword.

for i in range(2,4):
    print("lst at %d contains %s" % (i, lst[i]))

This would output:

lst at 2 contains charlie
lst at 3 contains delta

The list may also be sliced. The following slice notation goes from element at index 1 to the end with a step of 2. The two for loops give the same result.

for s in lst[1::2]:
    print(s)

for i in range(1, len(lst), 2):
    print(lst[i])

The above snippet outputs:

bravo
delta

Indexing and slicing is a topic of its own.