python performance vs - Was ist eine schnellere Operation, re.match / search oder str.find?





2 Answers

Benutze das:

if 'lookforme' in s:
    do something

Regex muss zuerst kompiliert werden, was zusätzlichen Aufwand verursacht. Pythons normale String-Suche ist sowieso sehr effizient.

Wenn Sie den gleichen Begriff viel suchen oder wenn Sie etwas Komplexeres tun, dann wird Regex nützlicher.

java profiling c#

Ist es bei einer Suche nach einem String einfacher, einfach str.find / rfind zu verwenden, als re.match / search zu verwenden?

Das heißt, für eine gegebene Zeichenfolge, s, sollte ich Folgendes verwenden:

if s.find('lookforme') > -1:
    do something

oder

if re.match('lookforme',s):
    do something else

?




Ich hatte das gleiche Problem. Ich habe Jupyters% Zeit verwendet, um zu überprüfen:

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 in Satz 61.3 ns ± 3 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 10000000 Schleifen)

x in Token-Liste 93,3 ns ± 1,26 ns pro Schleife (Mittelwert ± Std. Dev. von 7 Läufen, jeweils 10000000 Schleifen)

Regex-Suche 772 ns ± 8,42 ns pro Schleife (Mittelwert ± Std. Dev. von 7 Läufen, jeweils 1000000 Schleifen)

kompilierte Regex-Suche 420 ns ± 7.68 ns pro Schleife (Mittelwert ± Std. Dev. von 7 Läufen, jeweils 1000000 Schleifen)

Kompilieren ist schnell, aber das Einfache ist besser.




Related