Most elegant way to modify elements of nested lists in place

Conrad.Dean picture Conrad.Dean · Apr 15, 2011 · Viewed 37.3k times · Source

I have a 2D list that looks like this:

table = [['donkey', '2', '1', '0'], ['goat', '5', '3', '2']]

I want to change the last three elements to integers, but the code below feels very ugly:

for row in table:
    for i in range(len(row)-1):
        row[i+1] = int(row[i+1])

But I'd rather have something that looks like:

for row in table:
    for col in row[1:]:
        col = int(col)

I think there should be a way to write the code above, but the slice creates an iterator/new list that's separate from the original, so the references don't carry over.

Is there some way to get a more Pythonic solution?

Answer

Shekhar picture Shekhar · Apr 15, 2011
for row in table:
    row[1:] = [int(c) for c in row[1:]]

Does above look more pythonic?