2010-11-19 9 views
1

私はPython 2.7のアナグラムソルバーで作業していましたが、私が説明を見つけることができなかった好奇心に遭遇しました。 、Pythonは明らかに、すべてをコメントアウトPythonのフォワードスラッシュreplace()

# anagram 
# anagram 
# anagram 
. 
. 
. 
etc 

直接文字列にこれを読んで、私は見つけるしようとしている)(置き換えで遊んでいた:プログラムはそうのような形式でアナグラムのリストを含むファイルからの読み込みハッシュ文字を取り除く方法。試してみてください...

string = file.read().replace('#', '') 

...空の文字列を生成します。私はハッシュの前にバックスラッシュを使用しようとしたが、goofed、私に結果を与えたスラッシュを、typo'd:不要な文字を除くと

string = file.read().replace('/#', '') 
string = '#\tanagram\n#\tanagram\n#\tanagram' 

は、その時点で非常に簡単ではなかったし、プログラムの動作完全に。しかし、私は完全に理解できないコード行を使用することに満足していません。私は多くの幸運を持っていませんでした。何かを説明したり、このようなことをするコードを見つけるので、間違った場所を探したり、間違ったことを探しています。

誰でもこのように動作する理由を説明できますか?

+0

の2番目の例では、 'replace'は何も置き換えず、元の文字列を返します。これはファイル内に' /# 'シーケンスがないためです。 – SilentGhost

+0

#はPythonのソースコードでのみ特殊なものであり、ファイルから読み込まれた文字列には特殊なものではありません。 –

答えて

0

'#''/#'に変更したときに何か変更しましたか?プログラムをそのまま実行してみて、/を削除してみてください。 #は、Python文字列では特殊文字ではありません。

文字列に'/#'のインスタンスが存在しないため、私たちが表示したコードには何も表示されません。

サンプル対話セッション:

>>> "#foo bar\n\t#blah".replace("#", "") 
'foo bar\n\tblah' 
+0

あなたの返事をありがとう、Nathon。前述のようにスラッシュを削除すると、空の文字列が返されます。それ以外の変更はありません。 –

+0

@Vulpine:no repro。実際のファイルの内容を表示します。空文字列を返す 'replace'は特別なものです。 – SilentGhost

+0

@Vulpine:ファイルはASCIIでエンコードされていますか? – nmichaels

3

はこれを試してみてください:

[s.lstrip('#\t') for s in file.read().split('\n')] 

Pythonは文字列内のいかなる方法で特別に#を扱うことはありません、あなたはそれをエスケープする必要はありません。

関連する問題