我的问题是如何从列表中删除所有字符串,例如,如果我有initProperties()
且结果为list=['hello',1,2,3,4,'goodbye','help']
答案 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函数。 :)