Найти vs в работе в строке python

Мне нужно найти шаблон в строке и найти, что мы можем использовать или находить. Может ли кто-нибудь предложить мне, какой из них будет лучше/быстрее в строке. Мне не нужно находить индекс шаблона, так как find также может возвращать индекс шаблона.

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

No 

Ответ 1

Используйте in, это быстрее.

[email protected]:~$ python -m timeit 'temp = "1:5.9";temp.find(":")'
10000000 loops, best of 3: 0.139 usec per loop
[email protected]:~$ python -m timeit 'temp = "1:5.9";":" in temp'
10000000 loops, best of 3: 0.0412 usec per loop

Ответ 2

Определенно используйте 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

Это также намного читаемо.

Здесь ссылка на документацию по ключевому слову, а также связанный с ней вопрос .

Ответ 3

Использование in будет быстрее, чем использование вставляет только шаблон, а если вы используете find, он даст вам шаблон, а также его индекс, поэтому потребуется некоторое время на вычисление индекса строки по сравнению с. Однако если вы не имеете дело с большими данными, то это зависит от того, что вы используете.