【问题标题】:Remove empty element but keep zeros as values删除空元素但保留零作为值
【发布时间】:2011-03-26 14:24:56
【问题描述】:

我有一个清单如下:

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 位小数,出于示例目的请忽略。

有什么建议吗? 谢谢。

【问题讨论】:

  • 大家好,忘了补充,空字符串可能是几个空格。即''' '' '
  • 要考虑空格,只需执行 x.strip() != ''

标签: python list


【解决方案1】:

为什么不直接删除所有''

>>> 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]

【讨论】:

  • 这肯定会奏效。刚想自己回答这个问题。
【解决方案2】:

让我们看看你有什么

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 != '']

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

【讨论】:

  • 啊.. if x 是一个错字。自发地写而不是剪切和粘贴。现在工作!谢谢。
【解决方案3】:
>>> 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]

看起来不错。

【讨论】:

    【解决方案4】:

    我认为过滤器功能是做你想做的事的好方法。

    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)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-19
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      相关资源
      最近更新 更多