[First-ever question from first-ever Stack-o-flow Python beginner user]
I have been trying to create a function that appends numbers 1 to 10 and then erase from 10 to 1 in python list object. I succeeded however, I bumped into a weird behavior of for-in loops.
Below is what I did & succeeded:
def a():
li = []
for i in range(1,11):
li.append(i)
print(li)
for n in range(1,11):
li.remove(li[-1])
print(li)
a()
would print:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
[]
However, if I change the second part of its for-loop range(1,11)
to li
, the iteration stops as shown below.
def a():
li = []
for i in range(1,11):
li.append(i)
print(li)
for n in li: <-------------- THIS PART
li.remove(li[-1])
print(li)
a()
Would print:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]
So, I checked its length of the object li
.
def a():
li = []
for i in range(1,11):
li.append(i)
print(li)
print("Length before passed: ", len(li))
for n in li: <------------ THIS
print("Length BEFORE REMOVE: ", len(li))
li.remove(li[-1])
print("Length AFTER REMOVE: ", len(li))
print(li)
a()
Would print:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Length before passed: 10
Length BEFORE REMOVE: 10
Length AFTER REMOVE: 9
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Length BEFORE REMOVE: 9
Length AFTER REMOVE: 8
[1, 2, 3, 4, 5, 6, 7, 8]
Length BEFORE REMOVE: 8
Length AFTER REMOVE: 7
[1, 2, 3, 4, 5, 6, 7]
Length BEFORE REMOVE: 7
Length AFTER REMOVE: 6
[1, 2, 3, 4, 5, 6]
Length BEFORE REMOVE: 6
Length AFTER REMOVE: 5
[1, 2, 3, 4, 5] <---- And it stops here.
What is going on here? Why would python for-loop stop before its full cycle?
Thank you very much.