let\'s say I have a list
a = [1,2,3]
I\'d like to increment every item of that list in place. I want to do something as syntactically easy
Here ya go:
# Your for loop should be rewritten as follows:
for index in xrange(len(a)):
a[index] += 1
Incidentally, item IS a reference to the item
in a
, but of course you can't assign a new value to an integer. For any mutable type, your code would work just fine:
>>> a = [[1], [2], [3], [4]]
>>> for item in a: item += [1]
>>> a
[[1,1], [2,1], [3,1], [4,1]]
In python integers (and floats, and strings, and tuples) are immutable so you have the actual object (and not a copy), you just can't change it.
What's happening is that in the line: item += 1
you are creating a new integer (with a value of item + 1
) and binding the name item
to it.
What you want to do, is change the integer that a[index]
points to which is why the line a[index] += 1
works. You're still creating a new integer, but then you're updating the list to point to it.
As a side note:
for index,item in enumerate(a):
a[index] = item + 1
... is slightly more idiomatic than the answer posted by Triptych.
Instead of your map
-based solution, here's a list-comprehension-based solution
a = [item + 1 for item in a]