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)
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)
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)
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)
Les résultats indiquent que :
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!