python循环进行remove或pop遇到的坑
lst = ["香蕉","苹果","荔枝","西瓜","车厘子"]
for value in lst:
lst.pop(0)
print(lst)
"""
为什么这里没有把列表中元素清空呐?
第一点:记住列表是有序且可变的。
第二点:每次for循环索引+1,这和for循环中迭代器有关。
第三点:每次循环进行列表元素删除,都会导致索引位置会改变。
原列表:lst = ["香蕉","苹果","荔枝","西瓜","车厘子"]
第一次for循环:开始位置为0,进行lst.pop(0)删除第一个元素,此时开始位置变成了1
lst = ["苹果","荔枝","西瓜","车厘子"]
第二次for循环:开始位置为1,进行lst.pop(0)删除第一个元素,此时开始位置变成了2
lst = ["荔枝","西瓜","车厘子"]
第三次for循环:开始位置为2,进行lst.pop(0)删除第一个元素,此时开始位置变成了3
lst = ["西瓜","车厘子"]
重点:此刻开始位置为3,但是lst列表只有2个元素(索引为0,1)。
for...in...内部维护了一个下标,当下标达到list长度之后循环就结束了。
你现在在循环内部删元素,list长度越来越小,当删掉一半的时候,下标就超过list长度了。
解决办法:
lst = ["香蕉","苹果","荔枝","西瓜","车厘子"]
for value in range(len(lst)):
lst.pop(0)
print(lst)
# result:[]
"""