assignment in a for loop
Ben Finney
bignose+hates-spam at benfinney.id.au
Wed May 17 01:05:29 EDT 2006
"MackS" <mackstevenson at hotmail.com> writes:
> >>> l = [1,2]
> >>> for i in l:
> ... i = i + 1
> ...
> >>> l
> [1, 2]
>
> I understand (I think!) that this is due to the fact that in Python
> what looks like "assignment" really is binding a name to an
> object. The result is that inside the loop I am creating an object
> with value (i+1) and then "pointing" the name i at it. Therefore,
> the object to which i previously pointed (an element of list l)
> remains unchanged.
That's a fair explanation, yes.
> Two brief questions:
>
> 1) Is what I wrote above (minimally) correct?
Correct for what? You can tell if it's *syntactically* correct by
simply running it.
As for any other "correct", define that. Does it do what you want it
to do?
> 2) Independently of the answer to 1, is there a way for me to assign
> to elements of a list inside a loop and without resorting to C-style
> ugliness of
>
> for i in range(len(l))
> l[i] = l[i] + 1
You can build a new list from your operations on the old one.
new_list = []
for x in old_list:
new_list.append(x+1)
You can also do it more succinctly with a list comprehension
expression.
> (Note: not using a list comprehension.)
What's preventing the use of list comprehensions?
new_list = [x+1 for x in old_list]
--
\ "Smoking cures weight problems. Eventually." -- Steven Wright |
`\ |
_o__) |
Ben Finney
More information about the Python-list
mailing list