新人求解
这几个字符串里面也没有四川,为什么会被输出啊???? 因为列表在删除后会偏移位置列表是可变数据类型,你 for 循环对一个列表进行遍历过程中
又再对这个列表进行元素删除,那么就会导致有些元素未被遍历到
因为一个元素在列表中被删除时,所有被删除的后续元素的索引值都会前移 一个索引值的位置
把 for 循环从:
for i in cities:
改成
for i in cities[:]:
Twilight6 发表于 2022-4-25 14:28
列表是可变数据类型,你 for 循环对一个列表进行遍历过程中,又再对这个列表进行元素删除,那么就会导致 ...
city = ["四川成都","四川泸州","四川雅安","湖北济州","湖北武汉","北京","广州深圳","重庆"]
del_index = []
for each in city:
if each.find("四川") == -1:
del_index.append(each)
for each in del_index:
city.remove(each)
city
['四川成都', '四川泸州', '四川雅安'] 本帖最后由 阿奇_o 于 2022-4-25 18:11 编辑
从过程上,简单理解,原因是 for 循环 的遍历依据是:根据下标来遍历。
remove(item) 或 pop(index)等 修改操作,将导致 下标发生了动态变化,进而导致"不完全遍历"等问题 。
具体来看,你这里的例子就是,因为remove(i),后一个元素占据了被删除元素的位置,所以相当于 后一个元素,被跳过了,被没有进行判断。
最简单解决办法,楼上大佬已经说了,就是 改为 cities[:],
相当于另外复制一份包含相同元素的列表进行遍历,然后你对原cities进行删除操作,就能得到你想要的效果了。 {:5_97:}课本上的经典错误示例。 python爱好者. 发表于 2022-4-25 14:28
if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢{:10_254:} Jianghang020105 发表于 2022-4-27 00:38
if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢{:10_25 ...
find() 方法找不到就会返回 -1 python爱好者. 发表于 2022-4-27 08:10
find() 方法找不到就会返回 -1
懂了,感谢大哥{:10_281:} Jianghang020105 发表于 2022-4-27 00:38
if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢{:10_25 ...
find()是寻找对应字符下标的,如果不存在“四川”这个字符,就会返回-1。
还有一个index()也是寻找下标的,这个如果找不到,会报错 python爱好者. 发表于 2022-4-25 14:26
因为列表在删除后会偏移位置
谢谢,知道了{:10_266:}
页:
[1]