我的问题是如何消除列表中的所有字符串,例如,如果我有list=['hello',1,2,3,4,'goodbye','help'],结果为list=[1,2,3,4]
发布于 2016-05-03 20:31:59
您需要使用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]发布于 2016-05-03 20:51:26
你可以使用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-loop),不要转换它,因为“惰性计算”,它会更快,消耗更少的内存。如果您将方括号替换为圆括号,则可以实现与上面的示例相同的效果。
lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help']
filtered = list(filter(lambda element: not isinstance(element, str), lst))
print(filtered)
# [1, 2, 3, 4]发布于 2016-05-03 20:46:49
可以像@user3100115一样使用列表理解,也可以使用"lisp/lambda方法“
>> l = [1, 2, 'a', 'b']
>> list(filter(lambda a: isinstance(a, int), l))
[1, 2]顺便说一下,不要将变量命名为list。它已经是一个python函数了。:)
https://stackoverflow.com/questions/37004138
复制相似问题