2010-04-15 17 views
7

Si un usuario escribe en [[0,0,0], [0,0,1], [1,1,0]] y presiona enter, , el programa debe convertir esta cadena en varias listas; una lista sosteniendo [0][0][0], otra para [0][0][1] y la última lista de [1][1][0]¿Cómo puedo convertir esta cadena en una lista de listas?

¿Tiene Python tienen una buena manera de manejar esto?

+0

No está claro lo que estás tratando de hacer. ¿Estás recibiendo la entrada como una cadena usando 'raw_input()' o algo similar? –

+0

raw_input. lo siento. Me olvidé de mencionar eso. – Phrixus

+0

La respuesta de Personman fue la solución más fácil que pude entender al instante en mi nivel de Python. ¡Sin embargo, gracias a todos los demás usuarios de pro python también! : D ¡Leer todo tipo de respuestas creativas fue muy interesante! Ustedes son increíbles! – Phrixus

Respuesta

1

Esto es un poco más flexible que Satoru, y no utiliza ninguna biblioteca. Aún así, no funcionará con listas más profundamente anidadas. Para eso, creo que necesitarías una función recursiva (o loop) o eval.

str = "[[0,0,0],[0,0,1],[1,1,0]]" 
strs = str.replace('[','').split('],') 
lists = [map(int, s.replace(']','').split(',')) for s in strs] 

listas ahora contiene la lista de listas que desea.

+0

Thx! Esta fue la solución más fácil que pude entender al instante en mi nivel de Python. Gracias a otros usuarios de Python, también! : D – Phrixus

+0

@ Prixius, hay una razón por la cual esta solución no obtuvo votos. Es fácilmente la solución más fea y perversa. Mi voto es por la solución @ S.Mark. –

+0

@Marcelo Cantos, gracias por su consejo. Quizás esto podría considerarse una mala solución si los usuarios pro python lo ven. Sin embargo, su solución solo funciona para mi programa y es fácil de explicar a los demás. :) Más que nada, no tengo ni idea de qué son las cosas ast o json ... y me preguntaba si es posible sin importar cosas ... Pero, de nuevo, gracias por tu consejo. ¡También echaré un vistazo a tus respuestas si alguna vez entiendo Python! – Phrixus

17
>>> import json 
>>> json.loads('[[0,0,0], [0,0,1], [1,1,0]]') 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 
+0

Esto es solo python 2.6+ sin módulos externos – fabrizioM

+4

Tenga en cuenta que esto analiza la expresión como JSON, * not * como literales de Python. Para listas, enteros y cadenas, esto es casi lo mismo. Para otros tipos, como tuplas, no funcionará. –

+0

@Thomas Wouters ¿Eres el mismo Thomas Wouters, que explica el funcionamiento interno de Python a los googlers? –

0
>>> import re  
>>> list_strs = re.findall(r'\[\d+\,\d+\,\d+\]', s) 
>>> [[[int(i)] for i in l[1:-1].split(',')] for l in list_str] 
-2
>>> string='[[0,0,0], [0,0,1], [1,1,0]]' 
>>> eval(string) 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 
>>> a=eval(string) 
>>> a 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 

antes de pasar a la cadena de eval(), hacer la desinfección es necesario en primer lugar.

+5

No sugiera eval() sin explicar cómo se ejecuta código Python completamente arbitrario. –

+0

basta con que el usuario ingrese "exit()" ... – thepandaatemyface

17
>>> import ast 
>>> ast.literal_eval('[[0,0,0], [0,0,1], [1,1,0]]') 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 

Para tuplas

>>> ast.literal_eval('[(0,0,0), (0,0,1), (1,1,0)]') 
[(0, 0, 0), (0, 0, 1), (1, 1, 0)] 
1

[[int(i) for i in x.strip(" []").split(",")] for x in s.strip('[]').split("],")]

una lista por comprensión en una lista por comprensión ... pero que derretirá tu cerebro

Cuestiones relacionadas