Ich möchte Zeichen in einer Zeichenfolge in Python entfernen:
string.replace(',', '').replace("!", '').replace(":", '').replace(";", '')...
Aber ich habe viele Zeichen, die ich entfernen muss. Ich dachte über eine Liste nach
list = [',', '!', '.', ';'...]
Aber wie kann ich das verwenden list
, um die Zeichen in der zu ersetzen string
?
Antworten:
Wenn Sie python2 verwenden und Ihre Eingaben Zeichenfolgen (keine Unicodes) sind, ist die absolut beste Methode
str.translate
:Andernfalls sind folgende Optionen zu berücksichtigen:
A. Iterieren Sie den Betreff char by char, lassen Sie unerwünschte Zeichen und
join
die resultierende Liste weg :(Beachten Sie, dass die Generatorversion
''.join(c for c ...)
weniger effizient ist).B. Erstellen Sie einen regulären Ausdruck im laufenden Betrieb und
re.sub
mit einer leeren Zeichenfolge:(
re.escape
stellt sicher, dass Zeichen den regulären Ausdruck mögen^
oder]
nicht brechen).C. Verwenden Sie die Mapping-Variante von
translate
:Vollständiger Testcode und Timings:
Ergebnisse:
(Als Randnotiz
remove_chars_translate_bytes
könnte die Zahl für uns einen Hinweis geben, warum die Branche Unicode so lange nicht einführen wollte).quelle
TypeError: translate() takes exactly one argument (2 given)
. Anscheinend braucht es Diktat als Argument.Sie können verwenden
str.translate()
:Beispiel:
quelle
s.translate(dict.fromkeys(map(ord, u",!.;")))
unicode.translate()
Methode hat andere Parameter als diestr.translate()
Methode. Verwenden Sie die Variante im obigen Kommentar für Unicode-Objekte.Sie können die Übersetzungsmethode verwenden.
quelle
quelle
Wenn Sie python3 verwenden und nach einer
translate
Lösung suchen, wurde die Funktion geändert und verwendet jetzt 1 Parameter anstelle von 2.Dieser Parameter ist eine Tabelle (kann ein Wörterbuch sein), in der jeder Schlüssel die Unicode-Ordnungszahl (int) des zu suchenden Zeichens und der Wert die Ersetzung ist (kann entweder eine Unicode-Ordnungszahl oder eine Zeichenfolge sein, der der Schlüssel zugeordnet werden soll).
Hier ist ein Anwendungsbeispiel:
quelle
Ein anderer Ansatz mit Regex:
quelle
Warum nicht eine einfache Schleife?
Vermeiden Sie es auch, Listen als "Liste" zu bezeichnen. Es überschreibt die eingebaute Funktion
list
.quelle
Sie könnten so etwas gebrauchen
Dieser Code ist nicht mein eigener und stammt von hier. Er ist ein großartiger Artikel und geht ausführlich darauf ein
quelle
Ein ebenfalls interessantes Thema zum Entfernen von UTF-8-Akzenten ist die Zeichenfolge, mit der Zeichen in ihre nicht akzentuierten Standardzeichen umgewandelt werden:
Was ist der beste Weg, um Akzente in einer Python-Unicode-Zeichenfolge zu entfernen?
Code-Auszug aus dem Thema:
quelle
Vielleicht ein moderner und funktionaler Weg, um das zu erreichen, was Sie wünschen:
Bitte beachten Sie, dass es für diesen speziellen Zweck ein ziemlicher Overkill ist. Wenn Sie jedoch komplexere Bedingungen benötigen, ist der Filter praktisch
quelle
einfacher Weg,
Ausgabe:
this-is-string--foo----bar--tuna---sandwich--is---good
quelle
Wie wäre es damit - ein Einzeiler.
quelle
Ich denke, das ist einfach genug und wird es tun!
Dies ist eine Möglichkeit, dies zu tun. Wenn Sie es jedoch satt haben, eine Liste der Zeichen zu führen, die Sie entfernen möchten, können Sie dies tatsächlich tun, indem Sie die Bestellnummer der Zeichenfolgen verwenden, die Sie durchlaufen. Die Bestellnummer ist der ASCII-Wert dieses Zeichens. Die ASCII-Zahl für 0 als Zeichen ist 48 und die ASCII-Zahl für Kleinbuchstaben z ist 122, also:
quelle
In diesen Tagen tauche ich in das Schema ein und jetzt denke ich, dass ich gut darin bin, zu rekursieren und zu bewerten. HAHAHA. Teilen Sie einfach einige neue Wege:
Bewerten Sie es zuerst
zweitens, rekursiere es
Hey, stimme nicht ab. Ich möchte nur eine neue Idee teilen.
quelle
Ich denke über eine Lösung dafür nach. Zuerst würde ich die Zeichenfolge als Liste eingeben. Dann würde ich die Listenelemente ersetzen. Dann werde ich mit dem Befehl join die Liste als Zeichenfolge zurückgeben. Der Code kann folgendermaßen aussehen:
Dies würde alles aus der Zeichenfolge entfernen. Was denkst du darüber?
quelle
Hier ist ein
more_itertools
Ansatz:Hier teilen wir die in gefundenen Elemente auf
blacklist
, reduzieren die Ergebnisse und verbinden die Zeichenfolge.quelle
Python 3, Implementierung eines einzeiligen Listenverständnisses.
quelle
Entfernen *%,&@! von unten Zeichenfolge:
quelle