为何Python中for循环与if语句处理列表时输出结果不同?
列表循环删除与条件删除的结果差异解析
先明确两段代码的输出:
- 用
for循环执行删除的代码,最终输出:['Banana', 'Orange'] - 用
if语句执行删除的代码,最终输出:['Apple', 'Banana', 'Orange']
先看if语句的逻辑
这段代码逻辑很直接:
- 先把列表第3个元素(索引2)赋值给
removeFoods,也就是"Pineapple" - 判断
"Pineapple"是否在列表里,确认存在后,调用foods.remove(removeFoods)只执行一次删除,把"Pineapple"从列表里移除 - 最终列表剩下
['Apple', 'Banana', 'Orange'],完全符合预期
再看for循环的问题
这段代码的核心问题是在遍历列表的同时修改列表结构,导致遍历跳过了部分元素,而且循环里的removeFoods变量被重新赋值,和一开始的赋值完全无关:
- 初始列表是
["Apple", "Banana", "Pineapple", "Orange"],循环开始后,遍历器会按索引顺序取元素 - 第一次循环:取索引0的
"Apple",调用remove删掉它,此时列表变成["Banana", "Pineapple", "Orange"] - 第二次循环:遍历器会接着取下一个索引(也就是索引1),此时列表索引1的元素是
"Pineapple",调用remove删掉它,列表变成["Banana", "Orange"] - 此时遍历器的下一个目标索引是2,但现在列表只有2个元素(最大索引是1),遍历直接结束,所以剩下的元素就是
['Banana', 'Orange']
简单说,循环里不是只删一开始指定的"Pineapple",而是在遍历过程中依次删除当前拿到的每个元素,但因为删除后列表长度变短、元素位置前移,导致遍历器跳过了"Banana"和"Orange",最终只删掉了前两个被遍历到的元素。
内容的提问来源于stack exchange,提问作者Achyut Bhattarai
相关产品推荐
相关产品推荐

