Heim >Backend-Entwicklung >Python-Tutorial >Was ist der effizienteste Weg, Satzzeichen aus einem String in Python zu entfernen?

Was ist der effizienteste Weg, Satzzeichen aus einem String in Python zu entfernen?

DDD
DDDOriginal
2024-12-22 01:30:22220Durchsuche

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

Bester Weg, Satzzeichen aus einer Zeichenfolge zu entfernen

Beim Versuch, Satzzeichen aus einer Zeichenfolge in Python zu entfernen, könnte man den folgenden Ansatz verwenden:

import string
s = "string. With. Punctuation?"  # Sample string
out = s.translate(string.maketrans("",""), string.punctuation)

Diese Methode kann jedoch zu komplex erscheinen. Gibt es einfachere Lösungen?

Effizienzperspektive

Für optimale Effizienz ist es kaum zu übertreffen:

s.translate(None, string.punctuation)

Dieser Code verwendet den Rohstring von C Operationen mit einer Nachschlagetabelle, die eine hochoptimierte Lösung bieten.

Alternative Ansätze

Wenn Geschwindigkeit nicht im Vordergrund steht, ziehen Sie die folgende Alternative in Betracht:

exclude = set(string.punctuation)
s = ''.join(ch for ch in s if ch not in exclude)

Diese Option ist schneller als die Verwendung von s.replace für jedes Zeichen, wird aber von non immer noch übertroffen -reine Python-Ansätze wie string.translate.

Timing-Analyse

Zum Vergleich Für die Leistung dieser Methoden wird der folgende Timing-Code verwendet:

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)

Die Ergebnisse zeigen, dass:

  • Der satzbasierte Ansatz ist weniger effizient als reguläre Ausdrücke oder String-Übersetzung .
  • string.translate übertrifft sowohl Set- als auch reguläre Ausdrucksmethoden.
  • Die Ersetzungsmethode ist die am langsamsten.

Daher ist es für eine effiziente Entfernung von Satzzeichen ratsam, s.translate(None, string.punctuation) (für niedrigere Python-Versionen) oder s.translate(str.maketrans(') zu verwenden. ', '', string.punctuation)) (für höhere Python-Versionen) Code.

Das obige ist der detaillierte Inhalt vonWas ist der effizienteste Weg, Satzzeichen aus einem String in Python zu entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn