|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我想要实现的功能是,把列表中的字符串删掉
代码:
numbers = [1,2,2,'a','y',1]
for each in numbers:
if type(each) == str:
num = numbers.index(each)
del numbers[num]
print(numbers)
为什么结果是:[1, 2, 2, 'y', 1]
如果输入的是numbers = [1,2,2,'a',1,'y']
结果是:[1, 2, 2, 1]
本帖最后由 Peteryo01223 于 2021-3-12 13:32 编辑
我知道了, 原因是:
- 运行时,Python 检查到位置 [3],发现 a 是 str,就把它删了。接着从位置 [4] 继续检查。注意,删除 a 后,y 位置前移到了 [3],没被程序检查。
- 当 numbers 中,a 和 y 被数字 1 隔开时,这个 1,也没有被程序检查。但因为,跳过的不是 str ,人看上去觉得是“对”的。其实也有隐患。
- numbers = [1,2,2,'a','程序根本不检查本位置!', 1]
- for each in numbers:
- if type(each) == str:
- num = numbers.index(each)
- del numbers[num]
- print(numbers)
复制代码
run 后结果:
- ============================
- [1, 2, 2, '程序根本不检查本位置!', 1]
复制代码
最便捷的解决方法:按3#楼鱼油说的,简单添加[:]
固定你要判断的对象,即可。
|
|