Qu'est ce qu'un fonctionnement plus rapide, re.match/de recherche ou de str.trouver?
Pour une large chaîne de recherches, est-il plus rapide de simplement utiliser str.trouver/rfind que l'usage de la ré.match/search?
Qui est, pour une chaîne de caractères, s, dois-je utiliser:
if s.find('lookforme') > -1:
do something
ou
if re.match('lookforme',s):
do something else
?
- Pour un hors, je suis sûr que la regex serait plus lent, à cause de la surcharge.
- Vous devez être prudent en comparant les deux, car ils ont des fonctionnalités différentes. Trouvez les recherches de l'ensemble de la chaîne, alors que le match correspond au début seulement (c'est à dire qu'il peut quitter tôt, selon les données). Si vous êtes à comparer des pommes et des oranges là.
Vous devez vous connecter pour publier un commentaire.
La question: qui est plus rapide est le mieux répondu en utilisant
timeit
.La sortie est:
Ainsi, non seulement devez-vous utiliser la
in
de l'opérateur, car il est plus facile à lire, mais parce que c'est plus rapide aussi.if x in X
avantX.find(x)
? et c'est peut-être fonction de l'utilisation effective cas, j'ai tester les options à l'intérieur de mon code à l'aide de: "' importation de temps \ time_start = temps.time() \ # option 1 \ print("Fini: %.4f s" % (de temps.time() - time_start)) "'__contains__
peut être plus rapide si référencées directement (pas de point de l'opérateur) plutôt enveloppé avecin
.re.match()
toujours plus lent (consécutifs)in
s pour les modèles avec de nombreuses possibilités? par exemple,a|b|c|d|e|f
(pré-compilé modèle).Utiliser ceci:
Regex besoin d'être compilé, ce qui ajoute des coûts. Python normal de la chaîne de recherche est très efficace, de toute façon.
Si vous recherchez la même durée d'un lot ou lorsque vous faites quelque chose de plus complexe alors regex deviennent plus utiles.
re.compiler des vitesses allant jusqu'regexs beaucoup si vous êtes à la recherche de la même chose encore et encore. Mais je viens de recevoir un énorme accélération à l'aide de "dans" la réforme de mauvais cas avant de me correspondre. Anecdotique, je sais. ~Ben
J'ai eu le même problème. J'ai utilisé Jupyter de l' %timeit à vérifier:
x dans la phrase 61.3 ns ± 3 ns par boucle (moyenne ± std. dev. de 7 pistes, 10000000 boucles de chaque)
x dans la liste des jetons 93.3 ns ± 1.26 ns par boucle (moyenne ± std. dev. de 7 pistes, 10000000 boucles de chaque)
regex recherche 772 ns ± 8.42 ns par boucle (moyenne ± std. dev. de 7 pistes, 1000000 boucles de chaque)
compilé regex recherche 420 ns ± 7.68 ns par boucle (moyenne ± std. dev. de 7 pistes, 1000000 boucles de chaque)
Compilation est rapide mais le plus simple est mieux.