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

Quel est le moyen le plus efficace de supprimer la ponctuation d'une chaîne en Python ?

DDD
Libérer: 2024-12-22 01:30:22
original
219 Les gens l'ont consulté

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

Meilleure façon de supprimer la ponctuation d'une chaîne

Lorsque vous essayez de supprimer la ponctuation d'une chaîne en Python, vous pouvez utiliser l'approche suivante :

import string
s = "string. With. Punctuation?"  # Sample string
out = s.translate(string.maketrans("",""), string.punctuation)
Copier après la connexion

Cependant, cette méthode peut paraître trop complexe. Existe-t-il des solutions plus simples ?

Perspective d'efficacité

Pour une efficacité optimale, il est difficile de la surpasser :

s.translate(None, string.punctuation)
Copier après la connexion

Ce code utilise la chaîne brute de C opérations avec une table de recherche, offrant une solution hautement optimisée.

Alternative Approches

Si la vitesse n'est pas une préoccupation majeure, envisagez l'alternative suivante :

exclude = set(string.punctuation)
s = ''.join(ch for ch in s if ch not in exclude)
Copier après la connexion

Cette option est plus rapide que l'utilisation de s.replace pour chaque personnage mais est toujours surpassée par non -des approches Python pures telles que string.translate.

Analyse du timing

Pour comparez les performances de ces méthodes, le code de timing suivant est utilisé :

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 indiquent que :

  • L'approche basée sur les ensembles est moins efficace que les expressions régulières ou les chaînes translation.
  • string.translate surpasse à la fois les méthodes d'ensemble et d'expression régulière.
  • La méthode de remplacement est la le plus lent.

Par conséquent, pour une suppression efficace de la ponctuation, il est conseillé d'utiliser le s.translate(None, string.uccion) (pour les versions inférieures de Python) ou s.translate(str.maketrans(' ', '', string.uccion)) (pour les versions Python supérieures) code.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal