余白

https://blog.lacolaco.net/ に移転しました

Pythonの「文字列に○○が含まれているか」の判定について気になったこと

Pythonである文字列にある文字列が含まれているかどうかを調べる際に気になったことをメモ
とりあえず3つ方法があったのでまとめます。
まず一つ目、find関数を使う場合


if 'hogehoge'.find('fuga') > -1:

find関数は文字列の先頭から指定文字列を探し、見つかったらその文字列の最初のインデックス、見つからなければ-1を返す関数。
後ろから探したい場合はrfind関数を使うといい

次にindex関数


try:
index = 'hogehoge'.index('fuga')
expect:
index = -1

index関数は文字列の先頭から指定文字列を探し、見つかったらその文字列の最初のインデックスを返し、見つからなければ例外を吐く関数。
後ろから探したい場合はこちらもrindexを使えば良い

そして最後がcount関数


if 'hogehoge'.count('fuga'):

どうでしょう、今までの2つと比べてすっきりしてる感じ。
count関数は文字列の中に指定した文字列がいくつ含まれているかを返す関数。
御存知の通りPythonでは0は偽なのでこれはJavaのcontainsのような真偽値を返す関数と全く同じように使えます。
というわけで私のコードでは積極的にcount関数で判定しています。

ところでPythonの思想的には3通りも方法があるのはどうかと思うのですがそこのところどうなんでしょうか?

[追記]
関数を使わずにinステートメントでも解決できるようです。


if 'fuga' in 'hogehoge':

一番わかりやすくすっきりしてるのがこれですかね

ということで4つ方法が見つかったわけですがやっぱりPython的にどうなのこれは…