How to convert strings into integers in Python?
I have a tuple of tuples from a MySQL query like this:
T1 = (('13', '17', '18', '21', '32'), ('07', '11', '13', '14', '28'), ('01', '05', '06', '08', '15', '16'))
I'd like to convert all the string elements into integers and put them back into a list of lists:
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
I tried to achieve it with
eval but didn't get any decent result yet.
int() is the Python standard built-in function to convert a string into an integer value. You call it with a string containing a number as the argument, and it returns the number converted to an integer:
print (int("1") + 1)
The above prints
If you know the structure of your list, T1 (that it simply contains lists, only one level), you could do this in Python 2:
T2 = [map(int, x) for x in T1]
In Python 3:
T2 = [list(map(int, x)) for x in T1]
Read more... Read less...
You can do this with a list comprehension:
T2 = [[int(column) for column in row] for row in T1]
The inner list comprehension (
[int(column) for column in row]) builds a
ints from a sequence of
int-able objects, like decimal strings, in
row. The outer list comprehension (
[... for row in T1])) builds a list of the results of the inner list comprehension applied to each item in
The code snippet will fail if any of the rows contain objects that can't be converted by
int. You'll need a smarter function if you want to process rows containing non-decimal strings.
If you know the structure of the rows, you can replace the inner list comprehension with a call to a function of the row. Eg.
T2 = [parse_a_row_of_T1(row) for row in T1]
I would rather prefer using only comprehension lists:
[[int(y) for y in x] for x in T1]
Instead of putting
int( ), put
float( ) which will let you use decimals along with integers.
I would agree with everyones answers so far but the problem is is that if you do not have all integers they will crash.
If you wanted to exclude non-integers then
T1 = (('13', '17', '18', '21', '32'), ('07', '11', '13', '14', '28'), ('01', '05', '06', '08', '15', '16')) new_list = list(list(int(a) for a in b) for b in T1 if a.isdigit())
This yields only actual digits. The reason I don't use direct list comprehensions is because list comprehension leaks their internal variables.
T3= for i in range(0,len(T1)): T3.append() for j in range(0,len(T1[i])): b=int(T1[i][j]) T3[i].append(b) print T3