ji871010 发表于 2022-4-25 14:15:52

新人求解

这几个字符串里面也没有四川,为什么会被输出啊????

python爱好者. 发表于 2022-4-25 14:26:20

因为列表在删除后会偏移位置

Twilight6 发表于 2022-4-25 14:28:37


列表是可变数据类型,你 for 循环对一个列表进行遍历过程中

又再对这个列表进行元素删除,那么就会导致有些元素未被遍历到

因为一个元素在列表中被删除时,所有被删除的后续元素的索引值都会前移 一个索引值的位置

把 for 循环从:

for i in cities:

改成

for i in cities[:]:

python爱好者. 发表于 2022-4-25 14:28:56

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:08:20

本帖最后由 阿奇_o 于 2022-4-25 18:11 编辑

从过程上,简单理解,原因是 for 循环 的遍历依据是:根据下标来遍历。

remove(item) 或 pop(index)等 修改操作,将导致 下标发生了动态变化,进而导致"不完全遍历"等问题 。

具体来看,你这里的例子就是,因为remove(i),后一个元素占据了被删除元素的位置,所以相当于 后一个元素,被跳过了,被没有进行判断。

最简单解决办法,楼上大佬已经说了,就是 改为 cities[:],
相当于另外复制一份包含相同元素的列表进行遍历,然后你对原cities进行删除操作,就能得到你想要的效果了。

z5560636 发表于 2022-4-26 18:19:40

{:5_97:}课本上的经典错误示例。

Jianghang020105 发表于 2022-4-27 00:38:14

python爱好者. 发表于 2022-4-25 14:28


if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢{:10_254:}

python爱好者. 发表于 2022-4-27 08:10:12

Jianghang020105 发表于 2022-4-27 00:38
if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢{:10_25 ...

find() 方法找不到就会返回 -1

Jianghang020105 发表于 2022-4-27 13:02:32

python爱好者. 发表于 2022-4-27 08:10
find() 方法找不到就会返回 -1

懂了,感谢大哥{:10_281:}

ji871010 发表于 2022-4-29 08:37:30

Jianghang020105 发表于 2022-4-27 00:38
if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢{:10_25 ...

find()是寻找对应字符下标的,如果不存在“四川”这个字符,就会返回-1。
还有一个index()也是寻找下标的,这个如果找不到,会报错

ji871010 发表于 2022-4-29 08:38:26

python爱好者. 发表于 2022-4-25 14:26
因为列表在删除后会偏移位置

谢谢,知道了{:10_266:}
页: [1]
查看完整版本: 新人求解