如何从列表中删除所有字符串

时间:2016-05-03 12:28:05

标签: python python-3.x

我的问题是如何从列表中删除所有字符串,例如,如果我有initProperties()且结果为list=['hello',1,2,3,4,'goodbye','help']

3 个答案:

答案 0 :(得分:9)

您需要使用isinstance来过滤掉那些字符串元素。另外,不要为变量命名list它会影响内置的list

>>> from numbers import Real
>>> lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help']
>>> [element for element in lst if isinstance(element, Real)]
[1, 2, 3, 4]

>>> [element for element in lst if isinstance(element, int)]
[1, 2, 3, 4]

>>> [element for element in lst if not isinstance(element, str)]
[1, 2, 3, 4]

答案 1 :(得分:2)

您可以使用isinstance执行此操作,但与 user3100115 的其他答案不同,我会黑名单类型,您不想要而不是白名单只有几种类型。不确定哪种更适合您的特殊情况,只需添加它作为替代。它也适用于没有任何进口。

lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help']
filtered = [element for element in lst if not isinstance(element, str)]
print(filtered)
# [1, 2, 3, 4]

您也可以使用内置filter代替列表理解。返回一个生成器,所以要直接打印它,你必须先将它转换成一个列表。但是,如果您要对其进行迭代(例如使用for - 循环),请不要对其进行转换,并且由于"延迟评估"它会更快并且消耗更少的内存。如果用圆括号替换方括号,则可以使用上面的示例实现相同的效果。

lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help']
filtered = list(filter(lambda element: not isinstance(element, str), lst))
print(filtered)
# [1, 2, 3, 4]

答案 2 :(得分:1)

使用列表理解为@ user3100115或使用“lisp / lambda方法”

>> l = [1, 2, 'a', 'b']
>> list(filter(lambda a: isinstance(a, int), l))
[1, 2]

顺便说一下,不要为变量list命名。它已经是一个python函数。 :)