Tengo una cadena que ya parece una lista:
activeStateString = "['11', '20', '0']"
Y me gustaría definir esto como una lista en Python. Sé que puedo comenzar a filtrarlo y desarmarlo y reconstruir una nueva lista, pero luego tengo que ir a loops, etc. ¿Hay alguna manera en Python para promover esa cadena de una “cadena” a una lista de inmediato? Así que una vez que se convierte:
activeStateString -> activeStateList
Yo obtengo:
11
para:
print activeStateList[0]
Gracias
(Python 2.6)
Use ast.literal_eval()
para interpretar cadenas que contienen literales de Python:
>>> import ast >>> ast.literal_eval("['11', '20', '0']") ['11', '20', '0']
Esto es más seguro que usar eval()
ya que se negará a interpretar cualquier cosa que no sea un valor literal:
>>> eval("__import__('sys').version") '2.7.5 (default, Oct 28 2013, 20:45:48) \n[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)]' >>> ast.literal_eval("__import__('sys').version") Traceback (most recent call last): File "", line 1, in File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 80, in literal_eval return _convert(node_or_string) File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 79, in _convert raise ValueError('malformed string') ValueError: malformed string
Use ast.literal_eval
:
>>> import ast >>> s = "['11', '20', '0']" >>> lst = ast.literal_eval(s) >>> lst ['11', '20', '0']
Use int()
con un map
o una lista de comprensión si desea convertir los elementos de la lista a números enteros:
>>> map(int, lst) [11, 20, 0]
Ayuda en ast.literal_eval
:
>>> help(ast.literal_eval) Help on function literal_eval in module ast: literal_eval(node_or_string) Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.