如何从python中的列表中删除所有整数值

时间:2010-07-01 15:16:44

标签: python string

我只是python中的初学者,我想知道是否可以从列表中删除所有整数值?例如,文档就像

['1','introduction','to','molecular','8','the','learning','module','5']

删除后,我希望文档看起来像:

['introduction','to','molecular','the','learning','module']

8 个答案:

答案 0 :(得分:25)

要删除所有整数,请执行以下操作:

no_integers = [x for x in mylist if not isinstance(x, int)]

但是,您的示例列表实际上不包含整数。它只包含字符串,其中一些只由数字组成。要过滤掉这些,请执行以下操作:

no_integers = [x for x in mylist if not (x.isdigit() 
                                         or x[0] == '-' and x[1:].isdigit())]

可替换地:

is_integer = lambda s: s.isdigit() or (x[0] == '-' and x[1:].isdigit())
no_integers = filter(is_integer, mylist)

答案 1 :(得分:12)

你也可以这样做:

def int_filter( someList ):
    for v in someList:
        try:
            int(v)
            continue # Skip these
        except ValueError:
            yield v # Keep these

list( int_filter( items ))

为什么呢?因为int比尝试编写规则或正则表达式来识别编码整数的字符串值更好。

答案 2 :(得分:10)

列表中的所有项目都不是整数。它们是仅包含数字的字符串。因此,您可以使用isdigit字符串方法过滤掉这些项目。

items = ['1','introduction','to','molecular','8','the','learning','module','5']

new_items = [item for item in items if not item.isdigit()]

print new_items

文档链接:http://docs.python.org/library/stdtypes.html#str.isdigit

答案 3 :(得分:4)

我个人喜欢过滤器。我认为,如果以明智的方式使用,它可以帮助保持代码的可读性和概念简单性:

x = ['1','introduction','to','molecular','8','the','learning','module','5'] 
x = filter(lambda i: not str.isdigit(i), x)

from itertools import ifilterfalse
x = ifilterfalse(str.isdigit, x)

注意第二个返回一个迭代器。

答案 4 :(得分:1)

你也可以使用lambdas(显然,递归)来实现(需要Python 3):

 isNumber = lambda s: False if ( not( s[0].isdigit() ) and s[0]!='+' and s[0]!='-' ) else isNumberBody( s[ 1:] )

 isNumberBody = lambda s: True if len( s ) == 0 else ( False if ( not( s[0].isdigit() ) and s[0]!='.' ) else isNumberBody( s[ 1:] ) )

 removeNumbers = lambda s: [] if len( s ) == 0 else ( ( [s[0]] + removeNumbers(s[1:]) ) if ( not( isInteger( s[0] ) ) ) else [] + removeNumbers( s[ 1:] ) )

 l = removeNumbers(["hello", "-1", "2", "world", "+23.45"])
 print( l )

结果(从'l'显示)将是: ['hello','world']

答案 5 :(得分:0)

请不要使用这种方式从列表中删除项目:(在THC4k评论后编辑)

>>> li = ['1','introduction','to','molecular','8','the','learning','module','5']
>>> for item in li:
        if item.isdigit():
            li.remove(item)

>>> print li
['introduction', 'to', 'molecular', 'the', 'learning', 'module']

这不起作用,因为在迭代时更改列表会混淆for循环。 此外,如果项目是包含负整数的字符串,则item.isdigit()将不起作用,如razpeitia所述。

答案 6 :(得分:0)

您可以使用filter内置功能获取列表的过滤副本。

>>> the_list = ['1','introduction','to','molecular',-8,'the','learning','module',5L]
>>> the_list = filter(lambda s: not str(s).lstrip('-').isdigit(), the_list)
>>> the_list
['introduction', 'to', 'molecular', 'the', 'learning', 'module']

以上可以通过使用显式类型转换来处理各种对象。由于几乎每个Python对象都可以合法地转换为字符串,因此filter为the_list的每个成员获取一个str转换后的副本,并检查字符串(减去任何前导' - '字符)是否为数字数字。如果是,则该成员将从退回的副本中排除。

The built-in functions are very useful.他们每个人都针对他们设计要处理的任务进行了高度优化,并且可以帮助您避免重新发明解决方案。

答案 7 :(得分:0)

从列表中删除所有整数

ls = ['1','introduction','to','molecular','8','the','learning','module','5']
ls_alpha = [i for i in ls if not i.isdigit()]
print(ls_alpha)