# How to convert 2D list of string into 2D list of integers in Python

## How to convert 2D list of string into 2D list of integers in Python

Contents

Problem Description:

I have written the following code to read a csv file into a multidimensional list which is working fine. The problem arise when I created a function to calculate the total of 2D list. This is happening because the numbers are in string inside the 2D list i.e.

[[‘0’, ‘0’, ’30’, ‘2’, ’21’, ’13’, ’23’], …..,[‘8′, ’25’, ‘1’, ‘6’, ’21’, ’23’, ‘0’]].

What would be the simplest way to convert the string elements into integers in a 2D list such as

[[0, 0, 30, 2, 21, 13, 23],…..,[8, 25, 1, 6, 21, 23, 0]]

My code so far

``````rows = 52
cols = 7

def populate2D():

with open("rainfall.csv","r") as file:
matrix = []
for line in lineArray:
matrix.append(line.split(","))

return matrix

def display(matrix):

print(matrix)

def yearly(matrix):

total = 0
for row in matrix:
for value in row:
total += value

matrix = populate2D()
display(matrix)
total = yearly(matrix)
print()
print("Total rainfall for the year is " + str(total))
``````

csv file

``````0,0,30,2,21,13,23
29,3,29,30,7,8,25
26,5,26,13,4,13,4
22,30,13,15,15,0,2
3,12,11,10,17,0,15
8,13,11,24,30,24,27
22,18,2,29,11,13,18
15,1,29,23,18,7,0
23,27,3,7,13,14,28
6,25,24,14,20,23,5
24,29,26,22,0,9,18
22,27,22,20,24,29,21
23,13,14,4,13,1,21
25,21,21,6,28,17,19
4,6,11,10,21,1,5
11,7,22,11,10,24,15
25,11,23,3,23,8,3
22,23,0,29,15,12,5
21,11,18,22,1,4,3
11,10,3,1,30,14,22
2,16,10,2,12,9,9
2,29,17,16,13,18,7
22,15,27,19,6,26,11
21,7,18,4,14,14,2
6,30,12,4,26,22,11
21,16,14,11,28,20,3
19,10,22,18,30,9,27
8,15,17,4,11,16,6
19,17,16,6,18,18,6
2,15,3,25,27,16,11
15,5,26,24,24,30,5
15,11,16,22,14,23,28
25,6,7,20,26,18,16
5,5,21,22,24,16,5
6,27,11,8,24,1,16
28,4,1,4,3,19,24
19,3,27,14,12,24,0
6,3,26,15,15,22,26
18,5,0,14,15,7,26
10,5,12,22,8,7,11
11,1,18,29,6,9,26
3,23,2,21,29,15,25
5,7,1,6,15,18,24
28,11,0,6,28,11,26
4,28,9,24,11,13,2
6,2,14,18,20,21,1
20,29,22,21,11,14,20
28,23,14,17,25,3,18
6,27,6,20,19,5,24
25,3,27,22,7,12,21
12,22,8,7,0,11,8
8,25,1,6,21,23,0
``````

output

``````\$ python rainfall.py
[['0', '0', '30', '2', '21', '13', '23'], ['29', '3', '29', '30', '7', '8', '25'], ['26', '5', '26', '13', '4', '13', '4'], ['22', '30', '13', '15', '15', '0', '2'], ['3', '12', '11', '10', '17', '0', '15'], ['8', '13', '11', '24', '30', '24', '27'], ['22', '18', '2', '29', '11', '13', '18'], ['15', '1', '29', '23', '18', '7', '0'], ['23', '27', '3', '7', '13', '14', '28'], ['6', '25', '24', '14', '20', '23', '5'], ['24', '29', '26', '22', '0', '9', '18'], ['22', '27', '22', '20', '24', '29', '21'], ['23', '13', '14', '4', '13', '1', '21'], ['25', '21', '21', '6', '28', '17', '19'], ['4', '6', '11', '10', '21', '1', '5'], ['11', '7', '22', '11', '10', '24', '15'], ['25', '11', '23', '3', '23', '8', '3'], ['22', '23', '0', '29', '15', '12', '5'], ['21', '11', '18', '22', '1', '4', '3'], ['11', '10', '3', '1', '30', '14', '22'], ['2', '16', '10', '2', '12', '9', '9'], ['2', '29', '17', '16', '13', '18', '7'], ['22', '15', '27', '19', '6', '26', '11'], ['21', '7', '18', '4', '14', '14', '2'], ['6', '30', '12', '4', '26', '22', '11'], ['21', '16', '14', '11', '28', '20', '3'], ['19', '10', '22', '18', '30', '9', '27'], ['8', '15', '17', '4', '11', '16', '6'], ['19', '17', '16', '6', '18', '18', '6'], ['2', '15', '3', '25', '27', '16', '11'], ['15', '5', '26', '24', '24', '30', '5'], ['15', '11', '16', '22', '14', '23', '28'], ['25', '6', '7', '20', '26', '18', '16'], ['5', '5', '21', '22', '24', '16', '5'], ['6', '27', '11', '8', '24', '1', '16'], ['28', '4', '1', '4', '3', '19', '24'], ['19', '3', '27', '14', '12', '24', '0'], ['6', '3', '26', '15', '15', '22', '26'], ['18', '5', '0', '14', '15', '7', '26'], ['10', '5', '12', '22', '8', '7', '11'], ['11', '1', '18', '29', '6', '9', '26'], ['3', '23', '2', '21', '29', '15', '25'], ['5', '7', '1', '6', '15', '18', '24'], ['28', '11', '0', '6', '28', '11', '26'], ['4', '28', '9', '24', '11', '13', '2'], ['6', '2', '14', '18', '20', '21', '1'], ['20', '29', '22', '21', '11', '14', '20'], ['28', '23', '14', '17', '25', '3', '18'], ['6', '27',
'6', '20', '19', '5', '24'], ['25', '3', '27', '22', '7', '12', '21'], ['12', '22', '8', '7', '0', '11', '8'], ['8', '25', '1', '6', '21', '23', '0']]
Traceback (most recent call last):
File "C:rainfall.py", line 33, in <module>
total = yearly(matrix)
File "C:rainfall.py", line 28, in yearly
total += value
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
``````

## Solution – 1

You have to convert the array of numbers from string to int using `map` function when reading the numbers from the CSV

Replace

``````for line in lineArray:
matrix.append(line.split(","))
``````

with

``````for line in lineArray:
matrix.append(list(map(int, line.split(","))))
``````

## Solution – 2

The TypeError tells that you try to add an str and not an int to an int. You can convert your str to an int by just wrapping int(<YourString>) arrount it.

So in your code it would like this:

``````total = 0
for row in matrix:
for value in row:
total += int(value) # this line