【python】del删除列表元素的索引问题

下面代码是否能够正确运行,若不能请解释原因;若能,请分析其执行结果

【python】del删除列表元素的索引问题

遇到程序已经给出了代码,一定要自己动手在程序里面跑一下,运行结果如下:

【python】del删除列表元素的索引问题

报错类型:如果不懂英文单词什么意思的话,可以借助软件进行翻译,这里是索引错误,列表分配索引超出范围(百度翻译给出的结果),用人话说就是:x[i]里面的i值大于列表的实际长度,才出现报错

调试:在del语句的前后都添加print语句

①首先看一下在进行del语句的前后x[i]的数值是多少

【python】del删除列表元素的索引问题

②如果这里不明白的话,再添加部分代码如下

【python】del删除列表元素的索引问题

③尝试再添加一些代码,补充输出

【python】del删除列表元素的索引问题

输出结果分析

从最后一张图中可以看出,最后可正常运行时候x列表长度是10,索引下标的值为9,那么下一步的运行就是x列表长度是9,索引下标的值为10,这也就是产生了报错:x[i]里面的i值大于列表的实际长度

问题:

下面两种代码的逻辑不是一致的吗?怎么会输出不同呢?
【python】del删除列表元素的索引问题
【python】del删除列表元素的索引问题

代码调试如下图:

【python】del删除列表元素的索引问题
【python】del删除列表元素的索引问题

问题总结

这里存在着认识错误,每执行一次del语句,x列表里面的数据就少了一个,那么len(x)自然也就不会是固定的数值:20。随着运算的进行,列表的长度变小,当下标索引值为6(从0开始,到6,运行了7次),这时候已经不满足第一种代码的if判断,也就不运行del语句。但是第二种没有if判断,纯粹的要删除10个元素(列表的长度是20),所以最后输出和删除的都是10个数值