2017-11-04 197 views
0

我有一個看起來像alist = ['4', '1.6', 'na', '2e-6', '42']的python列表。如果我想從這個刪除引號,並使它看起來像[4, 1.6, na, 2e-6, 42],通常我使用下面的代碼:刪除python列表中元素的引號

alist = [float(x) if type(x) is str else None for x in alist] 

但是這一次,因爲我有串'na'在列表中的元素之一,這代碼行不起作用。有沒有一種優雅的方式在Python中做到這一點?

+0

你的意思是'nan',而不是'na'? – nbro

+0

由於某些原因,我有很多大名單,並且只要沒有價值,它就會說na或no,而不是nan。 我想知道是否有可能爲任何字母做! – Pia

+0

如果列表中包含「na」,您希望算法產生什麼? – nbro

回答

1

假設你是幸福的None替換值'na',或者更一般地,任何非浮動尋求與None文本,那麼你可以這樣做:

def converter(x): 
    try: 
     return float(x) 
    except ValueError: 
     return None 

alist = [converter(x) for x in alist] 

這將轉換什麼浮空它可以。所以,它的立場,這也將轉換現有的數字飄起:

>>> [converter(x) for x in ('1.1', 2, 'na')] 
[1.1, 2.0, None] 
+0

非常感謝,這工作完美:) – Pia

0

當Python列表,集合類型的字典,等打印出來,它們都打印在同一格式,Python使用編制了「生碼。」 Python用引號編譯列表。所以你只需要遍歷列表。

只需使用一個生成器表達式來解決這個問題(雖然它真的好好嘗試一下有多大的效果,除非你是一個Tkinter的部件或東西顯示):

>>> alist = ['4', '1.6', 'na', '2e-6', '42']  

>>> for a in alist: 
... print(a) 

>>> 4 
>>> 1.6 
>>> na 
>>> 2e-6 
>>> 42 

我不知道這裏的「NA 「,」南「混亂來自。無論如何,如果你想失去引號,通過生成器表達式運行你的代碼,它將不再處於「列表類」之下 - 因此,引號將不再出現。

列表元素都還是一樣的類型,

編輯:清晰,語法

+0

感謝您的明確解釋:) – Pia