Miałem ten sam problem. Kiedyś Jupyter za% timeit sprawdzić:
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 w zdaniu 61,3 ns ± 3 ns na pętli (.. Średnia ± std dev z 7 serii, 10000000 pętli każda)
xw tokena liście 93.3 ns ± 1,26 ns każdej pętli (średnia ± Std dev., 7 serii, 10000000 pętli każda)
regex wyszukiwania 772 ns ± 8,42 ns, w każdej pętli (średnia ± Std dev., 7 serii, 1000000 pętle każda)
skompilowane wyszukiwanie regex 420 ns ± 7,68 ns na pętlę (średnia ± std. Dev z 7 serii, po 1000000 pętli)
Kompilacja jest szybka, ale prosta jest lepsza.
Dla jednorazowej, jestem dość pewny, że regex będzie wolniejszy, z powodu dodatkowego naddatku. –
Powinieneś uważać, porównując te dwa, ponieważ mają one inną funkcjonalność. Znajdź przeszukuje cały ciąg, natomiast dopasowanie odpowiada tylko początkowi (tzn. Może wyjść wcześniej, w zależności od danych). Więc porównujesz tam jabłka i pomarańcze. –