2013-09-23 14 views
11
temp = "['a','b','c']" 
print type(temp) 
#string 

output = ['a','b','c'] 
print type(output) 
#list 

quindi ho questa stringa temporanea che è fondamentalmente una lista in formato stringa. . . sto cercando di trasformarlo in una lista ma non sono sicuro di un modo semplice per farlo. So che un modo, ma io non preferisco usare espressioni regolariConverti una stringa in lista. Python [string.split() che agisce strano]

se io uso temp.split() ottengo

temp_2 = ["['a','b','c']"] 
+2

Perché devi fare questo? – RyPeck

+4

Come hai ottenuto questa stringa? Questo di solito ti dice come valutarlo, fai il contrario di quello che hai fatto per ottenere la stringa. Per invertire 'json.dumps', usare' json.loads', e così via. Se lo prendi con 'repr', non tutto _can_ essere invertito, e non tutto ciò che può essere dovrebbe essere ... ma' ast.literal_eval' è la risposta per cose che possono/dovrebbero. – abarnert

risposta

19

Uso ast.literal_eval():

valutare in modo sicuro un nodo espressione o Unicode o Latin-1 codificato stringa contenente un'espressione Python. La stringa o il nodo forniti possono costituiti solo dalle seguenti strutture letterali Python: stringhe, numeri , tuple, elenchi, dadi, booleani e Nessuno.

>>> from ast import literal_eval 
>>> temp = "['a','b','c']" 
>>> l = literal_eval(temp) 
>>> l 
['a', 'b', 'c'] 
>>> type(l) 
<type 'list'> 
0

È possibile utilizzare eval:

>>> temp = "['a', 'b', 'c']" 
>>> temp_list = eval(temp) 
>>> temp_list 
['a', 'b', 'c'] 
>>> temp_list[1] 
b 
+2

Si prega di non utilizzare 'eval'! Non è sicuro, poiché consente l'esecuzione di codice arbitrario. – rlms

+0

You _can_, ma non dovresti. Come i ['eval' docs] (http://docs.python.org/2/library/functions.html#eval) dicono esplicitamente. – abarnert

+5

Più bruscamente: 'temp =" ['a', __import __ ('os'). System ('rm -rf /'), 'c'] "'. – abarnert

Problemi correlati