2010-04-15 15 views
7

Se un utente digita [[0,0,0], [0,0,1], [1,1,0]] e preme invio, il programma dovrebbe convertire questa stringa in più elenchi; una lista tenendo [0][0][0], altro per [0][0][1], e l'ultima lista per [1][1][0]Come posso convertire questa stringa in lista di liste?

Ha pitone hanno un buon modo per gestire questa situazione?

+0

Non è chiaro che cosa si sta cercando di fare. Stai ottenendo l'input come una stringa usando 'raw_input()' o qualcosa di simile? –

+0

raw_input. scusa. Ho dimenticato di dirlo. – Phrixus

+0

La risposta di Personman è stata la soluzione più semplice che ho potuto capire immediatamente a livello di mio pitone. Tuttavia, grazie anche a tutti gli altri utenti di Pro Python! : D Leggendo tutti i tipi di risposte diverse e creative è stato molto interessante! Voi ragazzi siete fantastici! – Phrixus

risposta

1

Questo è un po 'più flessibile di Satoru e non utilizza alcuna libreria. Tuttavia, non funzionerà con elenchi più profondamente annidati. Per quello, penso che avresti bisogno di una funzione ricorsiva (o loop) o di valutazione.

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

elenchi ora contiene l'elenco di elenchi desiderati.

+0

Thx! Questa è stata la soluzione più semplice che ho potuto capire immediatamente a livello di mio pitone. Grazie anche ad altri utenti Python! : D – Phrixus

+0

@Prixius, c'è una ragione per cui questa soluzione non ha ottenuto voti positivi. È facilmente la soluzione più brutta e perversa. Il mio voto è per la soluzione di @ S.Mark. –

+0

@Marcelo Cantos, grazie per il vostro consiglio. Forse questa potrebbe essere considerata una cattiva soluzione se gli utenti di Pro Python la vedono. Tuttavia, la sua soluzione funziona solo per il mio programma ed è facile da spiegare agli altri. :) Soprattutto, non ho idea di cosa siano le cose astuose e ... e mi stavo chiedendo se è possibile senza importare le cose .. Ma, ancora una volta, grazie per il vostro consiglio. Darò un'occhiata anche alle tue risposte se capisco un giorno python più profondo! – 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

Questo è solo python 2.6+ senza moduli esterni – fabrizioM

+4

Si noti che questo analizza l'espressione come JSON, * not * come letterali Python. Per gli elenchi, i numeri interi e le stringhe questo è principalmente lo stesso. Per altri tipi, come le tuple, non funzionerà. –

+0

@Thomas Wouters Sei lo stesso Thomas Wouters, che spiega gli interni di Python ai googler? –

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]] 

prima di passare la stringa di eval(), fare la sanificazione necessaria prima.

+5

Si prega di non suggerire eval() senza spiegare come esegue codice Python completamente arbitrario. –

+0

è sufficiente che un utente inserisca "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]] 

Per tuple

>>> 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 di comprensione in un elenco di comprensione ... ma che si scioglierà il tuo cervello

Problemi correlati