2017-07-20 4 views
-2

私はリストがあります:引用文字列の行に書式設定

l = ['str1', 'str2', 'str3', 'str4'] 

をしてて、それはそれを印刷するような私は、変数に格納する必要があります:

'str1\n' 
'str2\n' 
'str3\n' 
'str4' 

は、単一引用符を含みます\n

input_string = "\'" + l[0] + "\\n\'\n\'" + l[1] + "\\n\'\n\'" + l[2] + "\\n\'\n\'" + l[3] + "\'" 
print(input_string) 

を私たちは'\n'をエスケープする必要はありませんstr.format()を使用して、きれいな方法があります:

今私がやっていますか?

+0

なぜ '\ n'をエスケープする必要がないという奇妙な制限がありますか?すでに改行シーケンスをエスケープしています。 ''一重引用符をエスケープする必要はないことに注意してください。 –

+0

rを使って ".."そこから脱出する方法はありますか? –

+0

もちろん、 'r '' {} '\ n" 'を使うことができますが、自分のコードでも同じことができます。 –

答えて

2

エスケープシーケンス。あなたはそれが改行をエスケープ追加するために、最後以外のすべてを処理するためにループを使用することができます。

'\n'.join([r"'{}\n'".format(e) for e in l[:-1]] + ["'{}'".format(l[-1])]) 

デモ:

>>> l = ['str1', 'str2', 'str3', 'str4'] 
>>> '\n'.join([r"'{}\n'".format(e) for e in l[:-1]] + ["'{}'".format(l[-1])]) 
"'str1\\n'\n'str2\\n'\n'str3\\n'\n'str4'" 
>>> print(_) 
'str1\n' 
'str2\n' 
'str3\n' 
'str4' 

私は彼らの表現ので、あなたが本当にただPythonの文字列を表示したいと思われます:

'\n'.join([repr(e + '\n') for e in l[:-1]] + [repr(l[-1])]) 

あなたの簡略化された入力の場合、これは上記の式と同じ出力を生成します

>>> '\n'.join([repr(e + '\n') for e in l[:-1]] + [repr(l[-1])]) 
"'str1\\n'\n'str2\\n'\n'str3\\n'\n'str4'" 
>>> print(_) 
'str1\n' 
'str2\n' 
'str3\n' 
'str4' 
+0

以前の質問であいまいさを残して申し訳ありません。これは非常に役に立ちます。ありがとうございました! –

1

あなただけの改行文字を追加し、印刷にreprを利用することができます:

In [703]: for x in [x + '\n' if i != len(l) - 1 else x for i, x in enumerate(l)]: 
    ...:  print(repr(x)) 
    ...:  
'str1\n' 
'str2\n' 
'str3\n' 
'str4' 

これは(あなたが望むように見える何である)あなたの改行をエスケープ関与しないが、私は希望それらをエスケープすることをお勧めします。変数に保存


自体がstr.joinへの呼び出しに続いて、リスト内のreprを格納伴うだろう。ただ、改行をエスケープするか、それは次のように解釈されるのを防ぐためにリテラルr'...'生の文字列を使用し

In [708]: string = '\n'.join([repr(x + '\n') if i != len(l) - 1 else repr(x) for i, x in enumerate(l)]) 

In [709]: print(string) 
'str1\n' 
'str2\n' 
'str3\n' 
'str4' 
+0

私はそれを印刷するだけで必要なあいまいさを取り除くために私の質問を編集しました。私は実際にこれを変数に格納して、それを印刷すると答えが出るようにします。 –

+1

@ A.Shenzy私の答えを編集しました。しかし、Martjin Pietersの2番目の答えによく似ているので、それがあなたを助けたら、彼の答えを受け入れる。 –

+1

あなたの応答もアップアップ。お手伝いありがとう! –

関連する問題