标签:执行 函数 成功 表头 跳出循环 失败 range 产生 导致
最终目标:将非空列表的元素全部删除
一、第一次尝试代码:
numbers = [1,2,5,6,8,9,7]
for number in numbers:
del numbers[0]
print(numbers)
实际打印结果:[8, 9, 7]
二、调试后的程序执行过程
1、for循环的第一次,列表为[1,2,5,6,8,9,7],此时的number为列表中索引为0的元素1,之后删除列表头部元素——1
2、for循环的第二次,由于1已经删除,列表变为[2,5,6,8,9,7],而此时number为列表中索引为1的元素,而此时索引为1的元素是5,之后删除列表头部元素——2
3、接上,列表变为[5,6,8,9,7],此时number为列表中索引为2的元素,而此时索引为2的元素是8,继续删除头部元素——5
4、继续,列表变为[6,8,9,7],此时number为列表中索引为3的元素,此时索引为3的元素是7,删除列表头部元素——6
5、列表没有索引为4的第5个元素了,故跳出循环
6、打印结果[8,9,7]
三、错误原因
for in 中,每次number获取的元素就是列表索引值为0,1,2...的元素,而每次删除头部元素,引起了列表的变化,继而列表索引值产生变化,使得最终清空失败
四、第二次尝试代码
numbers = [1,2,5,6,8,9,7]
for i in range(0,len(numbers)):
del numbers[0]#numbers[-1]也行
print(numbers)
实际打印结果:[]
打印结果与预期相符,达成目标
五、过程分析
使用range()函数产生数值列表[0,1,2,3,4,5,6],每次访问数值列表时,就删除numbers列表的头部元素(删除尾部元素也一样),而数字列表的个数与原列表一致,故访问多少次数值列表,就对原列表执行多少次删除操作,并最终成功清空列表元素
六、思考
在使用for in处理变化的列表时,一定要注意列表索引值的变化,否则可能导致与预期不符的情况。
标签:执行 函数 成功 表头 跳出循环 失败 range 产生 导致
原文地址:https://www.cnblogs.com/alphabetical/p/13816033.html