删除空元素但保留零值
我有一个列表,内容如下:
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 个回答
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
让我们看看你有什么
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 != '']
因为你的列表里有字符串和数字,我觉得在你创建这个列表的时候处理会更简单。当然,如果不看到那个部分,我不能确定,也不能告诉你怎么修正。
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]