For循环导致错误的输出

时间:2020-02-06 16:28:35

标签: python list for-loop

下面的代码段显示为[5,7,18,23,50],为什么未从结果列表中删除5?

 mySlider.setLabelTable(new Hashtable(myLabelHashMap))

5 个答案:

答案 0 :(得分:4)

因为要在迭代列表时对其进行修改。

  • 当您阅读第一个项目时,它是11,因此将其删除。

  • 当您阅读第二项时,它是17,因为第一项 去掉了。项目5现在是的第一项,您将永远无法获得 检查它。

答案 1 :(得分:2)

由于移除了11个,因此5个在迭代过程中被跳过。这就是为什么您永远不会遍历列表并同时将其从列表中删除的原因。

list1 = [11, 5, 17, 18, 23, 50]
not_needed = {11, 5}

for e in not_needed:
    list1.remove(e)

print(list1)

礼物:

[17, 18, 23, 50]

答案 2 :(得分:2)

这是因为在第一次迭代后,项11被删除,它进入了第二个索引,该索引在列表[5,17,18,23,50]中变为17 纠正此问题的最佳方法是获取结果列表,这样您就不必突变“ list1”

list1 = [11, 5, 17, 18, 23, 50]
not_needed = {11, 5}
result = []
for e in list1:
    if e in not_needed:
        pass
    else:
        result.append(e)

print(result)

答案 3 :(得分:2)

遍历列表并同时对其进行修改时,请使用列表理解功能。

list1 = [x for x in list1 if not x in not_needed]
list1
[17, 18, 23, 50]

此处的更多详细信息: https://www.analyticsvidhya.com/blog/2016/01/python-tutorial-list-comprehension-examples/

答案 4 :(得分:1)

python中的

for循环在索引上运行,而不是在每个元素上

当找到11并将其从list1中删除时,list1变为[5、17、18、23、50],但是循环现在在第二个元素上。因此它错过了列表中的5。