+ 1

Can you explain the output?

I found this code while doing a quiz and the output doesn't make any sense, can anyone explain it to me plz: a = [0, 1, 2, 3] for a[-1] in a: print(a[-1]) Output : 0 1 2 2

10th Jan 2020, 10:14 PM
MedG
MedG - avatar
9 Answers
+ 8
a[-1] will become an iterator, and it will change in every loop, by the value in a: 1st loop: a[-1] = 0; a = [0, 1, 2, 0] 2nd loop: a[-1] = 1; a = [0, 1, 2, 1] 3rd loop: a[-1] = 2; a = [0, 1, 2, 2] In the 4th loop it will take the last value of a, which is a[-1] itself, so same output again: 4th loop: a[-1] = 2; a = [0, 1, 2, 2]
10th Jan 2020, 10:20 PM
Aymane Boukrouh
Aymane Boukrouh - avatar
+ 4
med gazzeh yes, it assigns to itself the valies of a. Since it is already in a, there will be a point where it reaches itself, so it will take the same value twice in a row. If for example you looped throught: for a[-1] in range(100): pass a[-1] will take the last value it was, which is 99 in this case.
10th Jan 2020, 10:40 PM
Aymane Boukrouh
Aymane Boukrouh - avatar
+ 4
med gazzeh No problem
10th Jan 2020, 10:42 PM
Aymane Boukrouh
Aymane Boukrouh - avatar
+ 3
med gazzeh you can consider a as a variable. When you use a for loop, it is like saying every time, put i = 1, i = 2, i = 3, i = 4... think of it as changing the variable name. After every for loop, the iterator used does not actually disappear, but it is created as a variable. Say we have this program: for i in range(10): pass print(i) # output: 9 Same goes to a[-1], it is like writing: a[-1] = 0 a[-1] = 1 ...
10th Jan 2020, 11:31 PM
Aymane Boukrouh
Aymane Boukrouh - avatar
+ 2
Aymane Boukrouh [INACTIVE] Thanks of the quick answer :)
10th Jan 2020, 10:41 PM
MedG
MedG - avatar
+ 2
Aymane Boukrouh [INACTIVE] ok, I got it, thanks :D
10th Jan 2020, 10:46 PM
MedG
MedG - avatar
+ 2
Aymane Boukrouh [INACTIVE] I already knew that but the fact that the element a[-1] can be used to iterate through 'a' seemed very strange to me at first, but after your very first comment I came to realize that a[-1] is a variable in itself (feel free to correct me if I am wrong) all became clear. So thanks again :) Ps : Sorry for late response
11th Jan 2020, 10:02 AM
MedG
MedG - avatar
+ 1
Aymane Boukrouh [INACTIVE] So a[-1] iterates through a and reassigns it's current value to itself?
10th Jan 2020, 10:29 PM
MedG
MedG - avatar
+ 1
Aymane Boukrouh [INACTIVE] It just struck me, I kept thinking how weard is this behaviour however if you think of a[-1] in terms of the allocated memory then it makes much more sense as the values in 'a' will just cycle through that part of memory (refered to by a[-1]) until it reachs it's own.
10th Jan 2020, 11:20 PM
MedG
MedG - avatar