He tenido el mismo problema. Solía% timeit de Jupyter para comprobar:
import re
sent = "a sentence for measuring a find function"
sent_list = sent.split()
print("x in sentence")
%timeit "function" in sent
print("x in token list")
%timeit "function" in sent_list
print("regex search")
%timeit bool(re.match(".*function.*", sent))
print("compiled regex search")
regex = re.compile(".*function.*")
%timeit bool(regex.match(sent))
x en la frase 61,3 ns ± 3 ns por bucle (.. Media ± std dev de 7 carreras, 10000000 bucles cada uno)
x en la lista de contadores 93,3 ns ± 1,26 ns por lazo (media ± std. prog. de 7 carreras, 10000000 bucles cada uno)
de búsqueda de expresiones regulares 772 ns ± 8,42 ns por bucle (media ± std. prog. de 7 carreras, 1000000 bucles cada uno)
búsqueda de expresiones regulares compiladas 420 ns ± 7.68 ns por ciclo (media ± estándar de 7 ejecuciones, 1000000 bucles cada uno)
La compilación es rápida pero lo simple es mejor.
Por un momento, estoy bastante seguro de que la expresión regular sería más lenta, debido a la sobrecarga adicional. –
Debe tener cuidado al comparar los dos, ya que tienen una funcionalidad diferente. Buscar busca la cadena completa, mientras que la coincidencia solo coincide con el comienzo (es decir, puede salir temprano, según los datos). Entonces estás comparando manzanas y naranjas allí. –