麻烦各位看个小问题
我想要实现的功能是,把列表中的字符串删掉代码:
numbers =
for each in numbers:
if type(each) == str:
num = numbers.index(each)
del numbers
print(numbers)
为什么结果是:
如果输入的是numbers =
结果是: 本帖最后由 Peteryo01223 于 2021-3-12 13:32 编辑
我知道了,原因是:
[*]运行时,Python 检查到位置 ,发现 a 是 str,就把它删了。接着从位置 继续检查。注意,删除 a 后,y 位置前移到了 ,没被程序检查。
[*]当 numbers 中,a 和 y 被数字 1 隔开时,这个 1,也没有被程序检查。但因为,跳过的不是 str ,人看上去觉得是“对”的。其实也有隐患。
numbers =
for each in numbers:
if type(each) == str:
num = numbers.index(each)
del numbers
print(numbers)
run 后结果:
============================
最便捷的解决方法:按3#楼鱼油说的,简单添加[:]
for each in numbers[:]:
固定你要判断的对象,即可。 numbers =
for each in numbers[:]:
if type(each) == str:
num = numbers.index(each)
del numbers
print(numbers) a删除后,y和1往前移动了一个index,但for循环还是执行6次,所以删除第二个的时候删除的是后面的。
所以循环对象不要在循环中改动。 # -*- coding: utf-8 -*-
numbers = ['q', 1, 2, 2, 'a', 'y', 1, 'b']
for each in range(len(numbers) - 1, -1, -1):
if type(numbers) == str:
del numbers
print(numbers)
使用逆序访问列表中的内容就可以啦~{:10_254:}
后面的即使被删除了,每次 for 循环前移一位,并不会受到影响 原因:
直接删除后,下一次循环的时候,会跳过当前索引
解决方案:
方法1、最简单的办法是拷贝一个列表,删除元素在拷贝列表中删
方法2、记录所有索引,一次性删除
方法3、递归,写函数,参数为列表,循环参数列表,找到后删除,将删除元素后的列表作为参数传入并调用函数。如此循环,等找不到的时候,递归结束
numbers =
n1 = []
for each in numbers:
print(each)
if type(each) == str:
n1.append(each)
print(n1)
for i in range(0,len(n1)):
numbers.remove(n1)
print(numbers)
解释就是上边那样,先记录,然后删除也可以 我记得这么干会报错的啊 给你推荐个代码,我自己在用的
usernumber = str(input("输入一个值:"))
char = []
for i,number in enumerate(usernumber):
if number.isdigit() == True:
char.insert(i,number)
char = ''.join(char)
print(char) Peteryo01223 发表于 2021-3-12 11:58
我知道了,原因是:
[*]运行时,Python 检查到位置 ,发现 a 是 str,就把它删了。接着从位置 继 ...
麻烦再问一下您 如果修改成:for each in numbers[:]意思就是每次执行这个循环,列表都会被重新拷贝,然后再从第一个元素开始重新进行判断对嘛? 本帖最后由 Peteryo01223 于 2021-3-12 16:16 编辑
dandan0523 发表于 2021-3-12 15:43
麻烦再问一下您 如果修改成:for each in numbers[:]意思就是每次执行这个循环,列表都会被重新拷贝, ...
使用 [ : ] 切片,可以浅拷贝整个 numbers 列表。那么
for each in numbers[:]
通过这句code,你让 Python 有了一个确定的对象,此对象不随 for 循环而有改变的机会。相当于给一排嫌疑犯们,照了一张照片,然后你看着照片,一一核对谁有问题。他们在照片上,没办法换位置,你的排查过程,就能做到“不漏掉任何一个”。
当然,大家又提出很多其他方法,也都行得通,思路不一样,体会体会,每种方法都有各自的价值。 小伤口 发表于 2021-3-12 11:59
numbers =
for each in numbers[:]:
if type(each) == str:
谢谢您!
页:
[1]