鱼C论坛

 找回密码
 立即注册
查看: 1284|回复: 10

[已解决]新人求解

[复制链接]
发表于 2022-4-25 14:15:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这几个字符串里面也没有四川,为什么会被输出啊????
最佳答案
2022-4-25 14:28:37

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

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

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

把 for 循环从:
for i in cities:

改成
for i in cities[:]:

80b966f1699da86236f535816b0aa92.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-25 14:26:20 | 显示全部楼层
因为列表在删除后会偏移位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-25 14:28:37 | 显示全部楼层    本楼为最佳答案   

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

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

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

把 for 循环从:
for i in cities:

改成
for i in cities[:]:

评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +3 收起 理由
ji871010 + 5 + 5 + 3
python爱好者. + 5 + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
['四川成都', '四川泸州', '四川雅安']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-25 18:08:20 | 显示全部楼层
本帖最后由 阿奇_o 于 2022-4-25 18:11 编辑

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

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

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

最简单解决办法,楼上大佬已经说了,就是 改为 cities[:],
相当于另外复制一份包含相同元素的列表进行遍历,然后你对原cities进行删除操作,就能得到你想要的效果了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-26 18:19:40 | 显示全部楼层
  课本上的经典错误示例。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-27 00:38:14 From FishC Mobile | 显示全部楼层
python爱好者. 发表于 2022-4-25 14:28

if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

find() 方法找不到就会返回 -1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-27 13:02:32 From FishC Mobile | 显示全部楼层
python爱好者. 发表于 2022-4-27 08:10
find() 方法找不到就会返回 -1

懂了,感谢大哥

评分

参与人数 1荣誉 +4 收起 理由
python爱好者. + 4 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 08:37:30 | 显示全部楼层
Jianghang020105 发表于 2022-4-27 00:38
if each.find("四川")== -1
这里为什么是判断each.find("四川")== -1啊,
刚入门,求告知,谢谢{:10_25 ...

find()是寻找对应字符下标的,如果不存在“四川”这个字符,就会返回-1。
还有一个index()也是寻找下标的,这个如果找不到,会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 08:38:26 | 显示全部楼层
python爱好者. 发表于 2022-4-25 14:26
因为列表在删除后会偏移位置

谢谢,知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表