2010-04-15 13 views
7

Jeśli użytkownik wpisze [[0,0,0], [0,0,1], [1,1,0]] i naciśnij enter, program powinien przekonwertować ten ciąg na kilka list; jedna lista gospodarstwa [0][0][0] inny na [0][0][1], a ostatni list do [1][1][0]Jak mogę przekonwertować ten ciąg na listę list?

Czy pyton mieć dobry sposób obsłużyć to?

+0

Nie jest jasne, co starasz się zrobić. Czy otrzymujesz dane wejściowe jako ciąg znaków za pomocą 'raw_input()' lub coś podobnego? –

+0

raw_input. Przepraszam. Zapomniałem o tym wspomnieć. – Phrixus

+0

Odpowiedź Personman była najłatwiejszym rozwiązaniem, które mogłem od razu zrozumieć na moim poziomie python. Jednak dzięki wszystkim innym użytkownikom pro python! : D Czytanie wszelkiego rodzaju różnych, twórczych odpowiedzi było bardzo interesujące! Jesteście niesamowici! – Phrixus

Odpowiedz

1

Jest to nieco bardziej elastyczny niż Satoru i nie używa żadnych bibliotek. Mimo to nie będzie działać z listami bardziej zagnieżdżonymi. Do tego, myślę, że potrzebujesz funkcji rekursywnej (lub pętli) lub 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] 

list zawiera teraz listę list, które chcesz.

+0

Thx! To było najprostsze rozwiązanie, które mogłem od razu zrozumieć na moim poziomie python. Podziękowania dla innych użytkowników Pythona! : D – Phrixus

+0

@Prixius, jest powód, dla którego to rozwiązanie nie uzyskało głosów up-voting. Jest to z pewnością najbrzydsze i najbardziej perwersyjne rozwiązanie. Mój głos dotyczy rozwiązania @ S.Mark. –

+0

@Marcelo Cantos, Dziękuję za twoją radę. Być może może to być złe rozwiązanie, jeśli użytkownicy pro python to zobaczą. Jednak jego rozwiązanie działa po prostu na mój program i łatwo go wytłumaczyć innym. :) Przede wszystkim nie mam zielonego pojęcia, czym są ast lub json ... i zastanawiałem się, czy to możliwe bez importowania rzeczy ... Ale jeszcze raz dziękuję za radę. Przyjrzę się również twoim odpowiedziom, jeśli pewnego dnia zrozumiem, że Python jest głębszy! – 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

To jest tylko python 2.6+ bez zewnętrznych modułów – fabrizioM

+4

Należy zauważyć, że to parsuje wyrażenie jako JSON, * nie * jako literały Python. W przypadku list, liczb całkowitych i łańcuchów jest to w większości takie samo. W przypadku innych typów, takich jak krotki, nie będzie działać. –

+0

@Thomas Wouters Czy jesteś tym samym Thomasem Wouters, który wyjaśnia interakcję Pythona z googlami? –

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

przed przekazaniem swój ciąg eval(), zrobić pierwszy niezbędne odkażenie.

+5

Nie sugeruj eval() bez wyjaśnienia, w jaki sposób wykonuje on całkowicie arbitralny kod w języku Python. –

+0

wszystko, czego potrzeba, to użytkownik, aby wprowadzić "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]] 

Dla krotek

>>> 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("],")]

lista zrozumieniem w listowego ... ale stopi mózg

Powiązane problemy