22

パターンを文字列に変換する必要があり、in または find も使用できることがわかりました。誰かが私にどちらが優れているか/文字列で速いかを提案できますか? find はパターンのインデックスも返すことができるので、パターンのインデックスを見つける必要はありません。

temp = "5.9"
temp_1 = "1:5.9"
>>> temp.find(":")
-1
>>> if ":" not in temp:
    print "No"

No 
4

3 に答える 3

44

を使用する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
于 2013-08-26T06:24:18.033 に答える
11

必ず使用して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

また、はるかに読みやすくなっています。

これは、キーワードに関するドキュメント リンクと、関連する質問です。

于 2013-08-26T06:22:06.313 に答える
3

in を使用するとパターンのみが提供されるため、in を使用すると高速になりますが、find を使用するとパターンとそのインデックスが得られるため、in と比較して文字列のインデックスの計算に余分な時間がかかります。大規模なデータを扱う場合、何を使用するかは重要ではありません。

于 2013-08-26T06:28:45.500 に答える