2015-09-04 64 views
-2

例如列表中刪除未使用的字符,我的名單是:如何從字符串

list_1 = [ '[1234,', '4567,', '19234,', '786222]' ] 

和預期的輸出結果是:

list_1 = [1234, 4567, 19234, 786222] 
+6

你最初是如何得到這份名單的?它看起來像你已經採取了一個列表表示,並將其拆分空間;爲什麼?! – jonrsharpe

+5

您確定這是您的清單嗎?誰給了你?這太糟糕了。 –

回答

5

可以strip壞字符,並轉換爲int

>>> [int(s.strip("[],")) for s in list_1] 
[1234, 4567, 19234, 786222] 
+0

這是最好的答案。 'ast.literal_eval'覺得對我來說「哈克」。 –

2

使用Python 2:

>>> map(int, ''.join(list_1).strip('[]').split(',')) 
[1234, 4567, 19234, 786222] 

在Python 3 map返回一個地圖對象只懶惰地評估。要創建清單,我們需要明確。這是一件好事,更高效,通用:

>>> list(map(int, ''.join(list_1).strip('[]').split(','))) 
[1234, 4567, 19234, 786222] 
+1

這是一個非常好的答案。但是,你可以添加一行,說明它僅適用於python2,因爲它在python3'map'返回一個地圖對象。我知道這個問題是用python2來標記的,但是這個註釋會作爲你答案的未來訪問者的威懾。 –

+0

@BhargavRao謝謝,完成了。 –

+0

現在答案看起來很完整。謝謝 –

1

您可以使用translate刪除你不需要的字符。

>>> [int(s.translate(None,"[],")) for s in list_1] 
[1234, 4567, 19234, 786222] 

希望這會有所幫助。

6

坦率地說,得到一個整數列表背出的最簡單的方法就是把它重新走到一起作爲一個字符串代表名單:

>>> list_1 = ['[1234,', '4567,', '19234,', '786222]'] 

>>> list_repr = ' '.join(list_1) 
>>> list_repr 
'[1234, 4567, 19234, 786222]' 

然後給它通過ast.literal_eval

>>> from ast import literal_eval 
>>> literal_eval(list_repr) 
[1234, 4567, 19234, 786222] 

在您使用split方法上的字符串已經代表在首位的清單得到了list_1可能的情況下,我相信你能弄清楚如何縮短這個過程......

+2

你總是讓我感到驚訝。我喜歡使用'literal_eval'。 –

+1

@PeterWood我不確定驚喜是目標,但謝謝!鑑於OP的輸入格式,我強烈懷疑他們通過'split'得到了它。 – jonrsharpe

+4

令人驚訝的是,我的意思是你經常用非正統的方式用正統的python來解決問題,如果這樣做有道理的話。所以,你在盒子外面思考,然後正確地做,'單向'。 –

1

如果你不知道一套「壞」字前面,你也可以從每個字符串過濾所有的數字,然後將結果轉換爲整數:

>>> list_1 = [ '[1234,', '4567,', '19234,', '786222]' ] 
>>> [int(filter(lambda x: x.isdigit(), s)) for s in list_1] 
[1234, 4567, 19234, 786222]