2017-02-06 8 views
1

文字列の '/'文字を置き換えたいとしますが、文字列内にあるかどうかは、この場合はどのようなオプションですか?python replace()関数は、置換する文字列の部分文字列を最初にチェックする必要がありますか?

このコード:

text = text.replace('/', os.linesep) if '/' in text else text 

それとも単にこの1?:

text = text.replace('/', os.linesep) 

"置き換えるしようとしている" 時間を無駄にしないために最初の文のに役立つだろうか?

+2

置き換えを行うのが速いです。これをこのように考えてください。 'if '/' in text'と言うと、それぞれの文字を見る必要があります。あなたが交換を行う場合、それは各文字を見なければなりません。したがって、実際に計算時間が2倍になるのは、それが最初に存在するかどうかを確認することです。 – user2896976

答えて

1

このようにチェックは不要です。しかし、部分文字列が存在しない文字列がたくさんある場合には、役立つかもしれません。その場合、パフォーマンスの向上が得られます。 timeitモジュールを使用してチェックする:

文字列に部分文字列が存在しない場合が多い比較です。パフォーマンスには大きな違いがあることに注意してください。

➜ ~ python3.5 -m timeit '"vxnxikmhdc".replace("a", "b") if "a" in "vxnxikmhdc" else "vxnxikmhdc"' 
10000000 loops, best of 3: 0.0524 usec per loop 
➜ ~ python3.5 -m timeit '"vxnxikmhdc".replace("a", "b")' 
1000000 loops, best of 3: 0.207 usec per loop 

比較文字列に部分文字列が含まれている比較。パフォーマンスにはほとんど違いがないことに注意してください。

➜ ~ python3.5 -m timeit '"vxnxikmhdc".replace("x", "j")' 
1000000 loops, best of 3: 0.245 usec per loop 
➜ ~ python3.5 -m timeit '"vxnxikmhdc".replace("x", "j") if "x" in "vxnxikmhdc" else "vxnxikmhdc"' 
1000000 loops, best of 3: 0.308 usec per loop 
関連する問題