删除空元素但保留零作为值

时间:2011-03-26 14:24:57

标签: python list

我有一个如下列表:

lst = [-1.33, '', -1.33, -1.33 -2.62, 0, -2.66, 1.41, 0, 0, 1.40, '',  1.37, 0]

列表中有两个空元素'',其中包含多个零和浮点数。

如何删除空元素但保留零?如下......

lst2 = [-1.33, -1.33, -1.33 -2.62, 0, -2.66, 1.41, 0, 0, 1.40, 1.37, 0]   

我尝试了以下内容:

lst2 = filter(None, lst)

lst2 = [x for x in lst if x if isinstance(x,str) == False]

但是,它也会删除零。

我知道浮点数会返回12位小数,请忽略例如。

有什么建议吗? 感谢。

4 个答案:

答案 0 :(得分:9)

为什么不简单地删除所有''

>>> lst2 = [x for x in lst if x != '']
>>> lst2
[-1.33, -1.33, -3.95, 0, -2.66, 1.41, 0, 0, 1.4, 1.37, 0]
>>>

或者你只能保留浮动和整数:

>>> [x for x in lst if isinstance(x, (float, int))]
[-1.33, -1.33, -3.95, 0, -2.66, 1.41, 0, 0, 1.4, 1.37, 0]

# or a bit fancier
>>> import numbers
>>> [x for x in lst if isinstance(x, numbers.Number)]
[-1.33, -1.33, -3.95, 0, -2.66, 1.41, 0, 0, 1.4, 1.37, 0]

答案 1 :(得分:3)

让我们来看看你有什么

lst2 = [x for x in lst 
if x 
if isinstance(x,str) == False]

你在那里拥有if x是什么?

此外,永远不要永远不要使用== False== True

使用not isinstance(x, str)

所以你应该

   lst2 = [x for x in lst if isinstance(x, str)]

或正如其他人所建议的那样

lst2 = [x for x in lst if x != '']

由于你的列表中包含字符串和数字,我怀疑在创建此列表时更容易处理它。当然,没有看到我不能确定或告诉你如何解决它。

答案 2 :(得分:2)

>>> l = [x for x in lst if x != '']
>>> l
[-1.3300000000000001, -1.3300000000000001, -3.9500000000000002, 0, -2.6600000000000001, 1.4099999999999999, 0, 0, 1.3999999999999999, 1.3700000000000001, 0]

好吧。

答案 3 :(得分:1)

我认为过滤功能是做你想要的美丽方式。

lst = [-1.33, '', -1.33, -1.33 -2.62, 0, -2.66, 1.41, 0, 0, 1.40, '',  1.37, 0]
lst2 = filter(lambda x: x != '', lst)
print lst2

输出继电器:

[-1.33, -1.33, -3.95, 0, -2.66, 1.41, 0, 0, 1.37, 1.37, 0]

您可以阅读here

filter(function, iterable)

等于

[item for item in iterable if function(item)]