[Tutor] Query regarding output

Alan Gauld alan.gauld at yahoo.co.uk
Thu Jun 29 05:02:14 EDT 2017


On 29/06/17 03:14, shubham goyal wrote:

> This Question is asked in some exam. i am not able to figure it out.
> 
> a = [0, 1, 2, 3]
> for a[-1] in a:
>     print(a[-1])
> 
> its giving output 0 1 2 2
> 
> it should be 3 3 3 3 as a[-1] belongs to 3.
> can anyone help me figuring it out.

This is quite subtle and it took me a few minutes to figure
it out myself.

It might be clearer if we print all of 'a' instead
of a[-1]:

>>> for a[-1] in a:
...    print(a)
...
[0, 1, 2, 0]
[0, 1, 2, 1]
[0, 1, 2, 2]
[0, 1, 2, 2]

What is happening is that a[-1] is being assigned the value
of each item in a in turn. The final iteration assigns a[-1]
to itself, thus we repeat the 2.

Another way to see it is to convert the for loop to
a while loop:

for variable in collection:
    process(variable)

becomes

collection = [some sequence]
index = 0
while index < len(collection):
     variable = collection[index]
     process(variable)
     index += 1

Now substitute your values:

collection = [0,1,2,3]
index = 0
while index < len(collection):
     collection[-1] = collection[index]
     print(collection[-1])
     index += 1

Does that help?

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos




More information about the Tutor mailing list