下面的代码段显示为[5,7,18,23,50],为什么未从结果列表中删除5?
mySlider.setLabelTable(new Hashtable(myLabelHashMap))
答案 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)
for循环在索引上运行,而不是在每个元素上。
当找到11并将其从list1中删除时,list1变为[5、17、18、23、50],但是循环现在在第二个元素上。因此它错过了列表中的5。