我有一个如下列表:
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位小数,请忽略例如。
有什么建议吗? 感谢。
答案 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)]