不是超级有经验的人,但是在使用isdigit()方法时遇到了一个错误。
我正在尝试浏览列表并删除所有非数字,但是我的最终列表一直在给我一些字母。不知道这是一个错误还是我做错了。
这是我当前的python:
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
我的代码:
>>> test
['b', 'd', 'f', 'h', 'j', 'l', 'x', '2']
>>> for i in test:
if not i.isdigit():
print(i, "should not be a digit")
test.remove(i)
b should not be a digit
f should not be a digit
j should not be a digit
x should not be a digit
>>> test
['d', 'h', 'l', '2']
在这里,我希望最终列表中只有2个。 我做错了吗?
答案 0 :(得分:2)
如果您想过滤掉isdigit
测试:
test = list(filter( lambda x : x.isdigit(), test))
如在评论中删除元素中所述,迭代时是不好的做法。
答案 1 :(得分:0)
当您第一次遍历列表时,它将使用第一项b
。现在,for循环期望第二个值,但是,由于您删除了b
,因此d
现在是第一个,f
是第二个。这样,d
被忽略,这就是为什么它在最终结果中。试试这个:
test = [i for i in test if not i.isdigit()]
for i in test:
print(i, 'must be a digit')
适应您的需求