删除空元素但保留零值

2 投票
4 回答
1565 浏览
提问于 2025-04-16 14:28

我有一个列表,内容如下:

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]

撰写回答