Velocity Reviews > weird iteration/assignment problem

# weird iteration/assignment problem

cirfu
Guest
Posts: n/a

 06-13-2008
for i in xrange(0, len(texts)):
texts[i] = "yes"

for i in texts:
i = "no"

why is the first one working but not the second. i mean i see why the
firts one works but i dont udnerstand why the second doesnt.

Diez B. Roggisch
Guest
Posts: n/a

 06-13-2008
cirfu schrieb:
> for i in xrange(0, len(texts)):
> texts[i] = "yes"
>
> for i in texts:
> i = "no"
>
> why is the first one working but not the second. i mean i see why the
> firts one works but i dont udnerstand why the second doesnt.

Because in the second you only bind the contents of texts to a name i.

But that doesn't mean that i magically became an "alias" for
texts[index] - it just happens to point at the same object.

To accomplish what you want, the pythonic idiom is to use enumerate:

for i, text in enumerate(texts):
text[i] = "yes"

Diez

Matimus
Guest
Posts: n/a

 06-13-2008
On Jun 13, 8:07 am, "Diez B. Roggisch" <(E-Mail Removed)> wrote:
> cirfu schrieb:
>
> > for i in xrange(0, len(texts)):
> > texts[i] = "yes"

>
> > for i in texts:
> > i = "no"

>
> > why is the first one working but not the second. i mean i see why the
> > firts one works but i dont udnerstand why the second doesnt.

>
> Because in the second you only bind the contents of texts to a name i.
>
> But that doesn't mean that i magically became an "alias" for
> texts[index] - it just happens to point at the same object.
>
> To accomplish what you want, the pythonic idiom is to use enumerate:
>
> for i, text in enumerate(texts):
> text[i] = "yes"
>
> Diez

That should be:

for i, text in enumerate(texts):
texts[i] = "yes"