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
Libérer: 2024-12-26 06:30:27
original
183 Les gens l'ont consulté

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal