Maison >développement back-end >Tutoriel Python >Quel est le moyen le plus efficace de supprimer la ponctuation des chaînes en Python ?

Quel est le moyen le plus efficace de supprimer la ponctuation des chaînes en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-26 06:30:27187parcourir

What's the Most Efficient Way to Remove Punctuation from Strings in Python?

Supprimer la ponctuation des chaînes : l'approche optimale

La suppression de la ponctuation des chaînes est une tâche courante dans de nombreux scénarios de programmation. Bien que diverses méthodes existent, sélectionner la plus efficace peut s'avérer difficile.

Efficacité inégalée : traduction de chaînes

Pour une efficacité maximale, la traduction de chaînes règne en maître. L'utilisation de s.translate(None, string.uccion) garantit que les opérations sur les chaînes brutes sont effectuées en C, offrant une vitesse inégalée. Pour les versions 3.9 et supérieures de Python, utilisez s.translate(str.maketrans('', '', string.uccion)).

Approches alternatives pour les scénarios critiques de non-performance

Si la vitesse n'est pas primordial, envisagez ces alternatives :

  • Exclusion d'ensemble : Créez un ensemble de caractères de ponctuation et excluez-les de la chaîne en utilisant la compréhension d'ensemble (par exemple, ''.join(ch for ch in s if ch not in discover)).
  • Expressions régulières : Utilisez des expressions régulières expressions pour faire correspondre et supprimer les caractères de ponctuation (par exemple, regex.sub('', s), où regex est un élément régulier précompilé expression).

Comparaison des performances

Pour évaluer les performances de ces méthodes, le code suivant a été exécuté :

import re, string, timeit

s = "string. With. Punctuation"
exclude = set(string.punctuation)
table = string.maketrans("","")
regex = re.compile('[%s]' % re.escape(string.punctuation))

def test_set(s):
    return ''.join(ch for ch in s if ch not in exclude)

def test_re(s):
    return regex.sub('', s)

def test_trans(s):
    return s.translate(table, string.punctuation)

def test_repl(s):
    for c in string.punctuation:
        s=s.replace(c,"")
    return s

print "sets      :",timeit.Timer('f(s)', 'from __main__ import s,test_set as f').timeit(1000000)
print "regex     :",timeit.Timer('f(s)', 'from __main__ import s,test_re as f').timeit(1000000)
print "translate :",timeit.Timer('f(s)', 'from __main__ import s,test_trans as f').timeit(1000000)
print "replace   :",timeit.Timer('f(s)', 'from __main__ import s,test_repl as f').timeit(1000000)

Les résultats ont révélé ce qui suit :

  • Traduction de chaîne : 2,12455511093 secondes
  • Régulier expressions : 6,86155414581 secondes
  • Définir l'exclusion : 19,8566138744 secondes
  • Remplacement de caractères : 28,4436721802 secondes

Conclusion

Lors de l'optimisation de la vitesse, la traduction des chaînes est le choix incontesté. Pour les scénarios moins gourmands en performances, des approches alternatives telles que l'exclusion d'ensembles ou les expressions régulières peuvent fournir des résultats satisfaisants.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn