2016-05-19 1 views
0

Ich mache String-Ersatz in einer Datei und mit dem csv Writer Registerkarten in der Ausgabe zu schreiben. Mit dem csv-Writer brauche ich eine wohlgeformte Liste, um den csv-Writer für die Ausgabe zu geben. Ich nehme eine Eingabezeile, die Registerkarten und Zeilenumbrüche angibt, und fügt sie in eine Liste ein, die der csv-Schreiber zu schreiben weiß.Python List Comprehension für eine Liste mit Listen

Ich habe den Code unten, der tatsächlich die Aufgabe benötigt, was ich gerne wissen würde ist, wenn dieser Code weiter mit List Verständnis auf der For-Schleife zu brechen Registerkarten in ihre eigenen Listen und ersetzt das vorhandene Element in Die Liste. Hier ist der Code:

testInput = "\\t//blah/...\\t//blah_blah/...\\n\\t-//blah/...\\t//blah/...\\n\\t//blah/...\\t//blah_blah/...\\n\\t//blah/...\\t//blah/...\\n" 

new_lines = [z for z in testInput.split('\\n') if z] 

x=-1 
if testInput.find("\\t") >= 0: 
    for line in new_lines: 
     x+=1 
     lines = line.split("\\t") 
     new_lines[x] = lines 
replacement_value = new_lines 

Mit diesem Code, der für for-Schleife transformiert new_lines aus dieser:

watchWindow

Um dies:

NewWatchWindow

können, die für die Schleife mit Listenverständnis neu geschrieben werden?

+0

Sie sollten dies wirklich auf http://codereview.stackexchange.com – beoliver

+0

Post ich bin verwirrt. Was ist dieser "CSV-Schreiber" von dem du sprichst? Ich sehe keine in deinem Code. –

+0

Gibt es einen Grund, warum Sie ein Listenverständnis wünschen? In Ihrem Fall wird die 'for'-Schleife, die Sie haben, eine bessere Leistung ergeben: Ihre Iteration. – Daniel

Antwort

1

Ich denke, man es mit einer Liste comp in einer Liste comp wie dies tun können ...

[[s for s in z.split("\\t")] for z in testInput.split('\\n') if z] 

Da ich neugierig war, sieht aus wie Sie die andere Art und Weise, wie diese gehen kann ...

"\\n".join(["\\t".join([a for a in x]) for x in new_lines])+"\\n" 
+0

Oder nur zum Spaß, der 'map' und' filter' Ansatz, um die Arbeit in CPython auf die C-Ebene zu bringen: 'from operator import methodcaller ',' map (methodcaller ('split', '\\ t'), Filter (Keine, testInput.split ('\\ n'))) ''; wenn auf Py3 und Sie eine 'liste' von' list's brauchen, nicht einen Generator von 'list's, wickeln Sie den' map' Aufruf in 'list'. :-) – ShadowRanger

+0

cluttons Antwort hat genau das gemacht, was die for-Schleife gemacht hat, damit die Antwort richtig ist. Ich bin ein bisschen perplex darüber, wie Sie dies debuggen? Mit der for-Schleife kann ich den Code durchgehen und die vorgenommenen Änderungen sehen. Mit der List-Comprehension-Methode kann ich einen Haltepunkt für die Linie und den Schritt setzen, aber die einzige Variable, die Sie sehen können, ist in diesem Fall s. Ist das ein häufiges Problem beim Listenverständnis oder mache ich es einfach falsch? – warmbeach