一道非常简单的Python题,这个哪里不对

img


不知道这么做为什么不可以,多了三个,感觉好像没有什么问题(此处省略30个字用于凑字)

你不可以在遍历list的同时删除list,因为你遍历到第2项的时候,删除第2项,那么第3项的index变成了2,而你继续去遍历第3项的时候其实拿到的是原来的第4项
如果要删除,你必须用索引去访问list

for i in range(len(list)-1,-1,-1):
    del list[i]

反向遍历,索引访问,从后往前删

这样一边遍历一边删除,减少了列表总长度,删除了"湖北荆州",那"湖北武汉"往前移动一个位置了
可以用下面的方法:

cities=[c for c in cities if "四川" in c]

你可以想像在一根拉伸的弹簧上插入了10面旗子,当你从1数到4时,你下一个会数5,但你把4号旗子抽掉了,此时弹簧4号后的旗子编号会都减少1,【你可以想像成弹簧收缩】也就是原来5号变成了现在的4号,6号变成了现在的5号...而当你数到5并要抽掉它时,此时的5号位置上是原来的6号旗子,所以原来的5号不会被抽掉。
也就是说,你你遍历的时候,索引一直在增加1。但你的列表删除元素后,后面的元素会向左移动,重新编号。