[SOLVED] Casting part of a 2D list to int in Python

Issue

I have to convert all string elements of a 2-D list to integers except for the first element. For example, for a list:

result = [['foo', '2', '21', '48'], ['bar', '18', '180', '54']]

I only wish to change the type of the "numbers" in the list to int type (say, ‘2’, ’21’, ’48’ in first row).

I have tried using a list comprehension,

result = [int(x) for x in result[i]]
# where i is the traversal variable

but this gives
invalid literal for int() with base 10: 'foo'
which is precisely what I am trying to avoid.

Any ideas on how to achieve this without creating another copy of the list? I want to reflect the changes back to the original list.

Solution

Perhaps you’re looking for str.isdigit:

out = [[int(x) if x.isdigit() else x for x in lst] for lst in result]

Output:

[['foo', 2, 21, 48], ['bar', 18, 180, 54]]

Answered By – enke

Answer Checked By – Robin (BugsFixing Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *