如何删除非数字的列表项?

3

我有一个对象 'a',我想将其转换为列表,使其不包含任何字符,只包含数字。虽然类似的问题涉及到列表推导式,但我正在寻找一种函数方法,可以帮助我收集数字。

>>> a
['(', '0', ',', ' ', '1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ',', ' ', '5', ',', ' ', '6', ',', ' ', '7', ',', ' ', '8', ',', ' ', '9', ')']

现在,我考虑分两个部分解决这个问题。首先,我想要删除所有','和' '(空格)。

为此,我编写了以下代码:

>>> for x in a :
    if x == ',' or x == ' ':
        del x

这并不会改变列表本身。

另外,是否有一种方式可以遍历每个对象,并检查它是否为数字,如果不是则删除它。 我认为这将更简单。

此外,如果有更好的解决方法,请建议。


可能是重复的问题:如何在迭代时从列表中删除项目? - Sayse
“del”语句无法删除变量所指向的内容,因为它仅删除第一级引用。https://docs.python.org/3/reference/simple_stmts.html#the-del-statement “删除名称会从局部或全局命名空间中删除该名称的绑定”,因此使用“del x”时,您要做的是删除“x”的绑定,而不是“x”指向的内容。 - rdas
1个回答

8
作为一般规则,您应该避免在迭代时修改可迭代对象(了解原因),尽管在这种情况下,根据 @rdas 的指出,您的代码没有删除任何元素。改用列表推导式来替代:
[i for i in l if i.isnumeric()]
# ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

1
这很简单。非常感谢。 - Vinamra Bali
2
是的,但不要忘记接受:),请查看我分享的链接(在投票选项下方的绿色勾号)@VinamraBali - yatu
1
确保 isnumeric 测试与您对“数字”字符串的概念一致。例如,这些不是数字:"+1","-1","0.0"。 - VPfB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接