|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
程序如下,lis是任一含有字符串和数字的列表,随便定义了一个:
lis=[1,23,214,'a','csa',16,'n']
for each in lis:
each=str(each)
if each.isalpha():
lis.remove(each)
print(lis)
输出结果:
[1, 23, 214, 'csa', 16]
请问为什么'csa'字符串没有被删除?
本帖最后由 第四时空 于 2017-11-22 21:46 编辑
你可以理解为列表是通过下标来迭代的当到"a"的时候,下标为3,然后把"a"删除。那"csa"就到了3的位置,但是迭代的原因下次迭代的下标为4,所以因此漏了一个。
解决方案,换while循环,或for循环前新建一个列表存储要删除的变量。
- i = 0
- while i < len(lis):
- if str(lis[i]).isalpha():
- lis.pop(i)
- i -= 1
- i += 1
复制代码- tmp_lis = []
- for each in lis:
- each = str(each)
- if each.isalpha():
- tmp_lis.append(each)
- for e in tmp_lis:
- lis.remove(e)
复制代码
|
|