2016-05-19 6 views
0

ファイル内で文字列置換を行い、出力にタブを書き込むためにcsvライターを使用しています。 CSVライターを使うということは、CSVライターに出力するための整形式のリストが必要だということです。私はタブと改行を指定する入力行を取り、それをcsvの作者が書き出す方法を知っているリストに置きます。リストを含むリストのPythonリストの理解

私は以下のコードを実際に必要としています。私が知りたいのは、そのコードをforループのリスト補完を使用してさらに洗練して、タブを自分のリストに分解し、リスト。このコードでは

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 

、用のためのループは、このからnew_linesを変換:これに

watchWindow

NewWatchWindow

その缶ループのためここでは、コードですリストの理解を使って書き直されますか?

私はあなたがこのようなリストカンプ内部のリストのcompでそれを行うことができると思い
+0

本当にこれをhttp://codereview.stackexchange.comに投稿してください。 – beoliver

+0

私は混乱しています。あなたが話しているこの「CSVライター」は何ですか?あなたのコードには何も見えません。 –

+0

リストの理解が必要な理由はありますか?あなたのケースでは、あなたが持っている 'for'ループはより良いパフォーマンスを得るでしょう:あなたの反復。 – Daniel

答えて

1

...

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

私は興味があったので、あなたはこのような他の方法で戻ることができますように見えます...

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

ちょっと面白くて、CPythonのCレベルに作業をプッシュする 'map'と' filter'アプローチ: 'from operator import methodcaller '、'( 'split '、' \\ t ')、filter(None、testInput.split(' \\ n ')))'; Py3上で、 'list'sのジェネレータではなく' list'sの 'list'が必要な場合は' list'で 'map'呼び出しをラップします。 :-) – ShadowRanger

+0

cluttonの答えはforループが行ったこととまったく同じでしたので、答えは正しいです。私は少しあなたがこれをデバッグする方法に困惑していますか? forループを使用すると、コードをステップ実行して変更を確認できます。リストの理解の方法では、私は行とステップにブレークポイントを設定できますが、この場合はあなたが見ることができる唯一の変数です。これはリストの理解に共通の問題ですか、それとも間違っているのですか? – warmbeach

関連する問題