码迷,mamicode.com
首页 > 编程语言 > 详细

python试错合集之一:使用for in 清空列表元素

时间:2020-10-14 20:48:30      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:执行   函数   成功   表头   跳出循环   失败   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处理变化的列表时,一定要注意列表索引值的变化,否则可能导致与预期不符的情况。

 

python试错合集之一:使用for in 清空列表元素

标签:执行   函数   成功   表头   跳出循环   失败   range   产生   导致   

原文地址:https://www.cnblogs.com/alphabetical/p/13816033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!