# More loops¶

Below are a few more useful things to know when working with loops and iterable objects like lists. It uses the raw_data = '13839' example that we have been trying to break into a list of integers.

First, I coded

for i in range(len(list_data)):
list_data[i] = int(list_data[i])


which does what we want. It produces a list of integers.

In :
raw_data = '13839'
list_data = list(raw_data)

for i in range(len(list_data)):
list_data[i] = int(list_data[i])

print(list_data)

[1, 3, 8, 3, 9]


### Getting stuck¶

Some people would naturally start by looping over the list objects...

for obj in list_data:
int(obj)


but were then stuck. How do I get the int(obj) saved to a list?

### Get the index and the value at the same time¶

The enumerate() function (docs). Enumerate takes an iterable object as an argument and returns a tuple of the index and the value.

In :
for i, obj in enumerate(list_data):
print('The index is', i, 'and the value is', obj)

The index is 0 and the value is 1
The index is 1 and the value is 3
The index is 2 and the value is 8
The index is 3 and the value is 3
The index is 4 and the value is 9

In :
raw_data = '13839'
list_data = list(raw_data)

for i, datum in enumerate(list_data):
list_data[i] = int(datum)

print(list_data)

[1, 3, 8, 3, 9]


### Saving to a different list¶

You may not want to overwrite list_data with the integers, but rather save them in a separate list.

To do this, we first create an empty list modified_data=[] and then use the .append() list method to add elements to the end of the list.

In :
list_data = list(raw_data)
print('The string list', list_data)

modified_data = []     # an empty list
for datum in list_data:
modified_data.append(int(datum))

print('The integer list', modified_data)

The string list ['1', '3', '8', '3', '9']
The integer list [1, 3, 8, 3, 9]