パターンを文字列に変換する必要があり、in または find も使用できることがわかりました。誰かが私にどちらが優れているか/文字列で速いかを提案できますか? find はパターンのインデックスも返すことができるので、パターンのインデックスを見つける必要はありません。
temp = "5.9"
temp_1 = "1:5.9"
>>> temp.find(":")
-1
>>> if ":" not in temp:
print "No"
No
パターンを文字列に変換する必要があり、in または find も使用できることがわかりました。誰かが私にどちらが優れているか/文字列で速いかを提案できますか? find はパターンのインデックスも返すことができるので、パターンのインデックスを見つける必要はありません。
temp = "5.9"
temp_1 = "1:5.9"
>>> temp.find(":")
-1
>>> if ":" not in temp:
print "No"
No
を使用するin
と、より高速になります。
dh@d:~$ python -m timeit 'temp = "1:5.9";temp.find(":")'
10000000 loops, best of 3: 0.139 usec per loop
dh@d:~$ python -m timeit 'temp = "1:5.9";":" in temp'
10000000 loops, best of 3: 0.0412 usec per loop
必ず使用してin
ください。これはこの目的のために作成されたもので、より高速です。
str.find()
このようなタスクには使用しないでください。文字が文字列内にあるかどうかを確認するためではなく、文字列内の文字のインデックスを見つけるために使用されます。したがって、はるかに遅くなります。
はるかに大きなデータを扱っている場合はin
、最大限の効率を得るために以下を使用する必要があります。
$ python -m timeit -s "temp = '1'*10000 + ':' " "temp.find(':') == -1"
100000 loops, best of 3: 9.73 usec per loop
$ python -m timeit -s "temp = '1'*10000 + ':' " "':' not in temp"
100000 loops, best of 3: 9.44 usec per loop
また、はるかに読みやすくなっています。
in を使用するとパターンのみが提供されるため、in を使用すると高速になりますが、find を使用するとパターンとそのインデックスが得られるため、in と比較して文字列のインデックスの計算に余分な時間がかかります。大規模なデータを扱う場合、何を使用するかは重要ではありません。