2011-03-26 60 views
2

我有一個列表如下:刪除空元素,但保持零作爲值

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

大家好,忘了補充一點,空字符串可能有幾個空格。即'''','''','''''。 – siva 2011-03-26 14:38:03

+0

爲了解決空間問題,只需做x.strip()!='' – 2011-03-26 14:42:25

回答

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

這肯定會起作用。剛想自己回答。 – seadowg 2011-03-26 14:33:47

+0

太棒了!謝謝.. – siva 2011-03-26 14:46:15

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] 

似乎沒問題。

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

謝謝。很有幫助。 – siva 2011-03-26 14:46:55

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

由於您的任務列表字符串和數字rs裏面,我懷疑在創建這個列表的時候處理這​​個會更容易。當然,沒有看到我不能確定或告訴你如何解決它。

+0

argh ..'如果x'是一個錯字。比剪切和粘貼寫得好。現在工作!謝謝。 – siva 2011-03-26 14:45:39