Was ist in Python der einfachste Weg, ein Zeichen in einer Zeichenfolge zu ersetzen?
Zum Beispiel:
text = "abcdefg";
text[1] = "Z";
^
Ändern Sie keine Zeichenfolgen.
Arbeiten Sie mit ihnen als Listen; Verwandeln Sie sie nur bei Bedarf in Zeichenfolgen.
>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'
Python-Strings sind unveränderlich (dh sie können nicht geändert werden). Dafür gibt es viele Gründe. Verwenden Sie Listen, bis Sie keine andere Wahl haben, und verwandeln Sie sie erst dann in Zeichenfolgen.
MID
wegen Scheiben:s[:index] + c + s[index+1:]
Schnellste Methode?
Es gibt drei Möglichkeiten. Für die Geschwindigkeitssucher empfehle ich 'Methode 2'
Methode 1
Gegeben durch diese Antwort
Was im Vergleich zu 'Methode 2' ziemlich langsam ist.
Methode 2 (SCHNELLE METHODE)
Gegeben durch diese Antwort
Welches ist viel schneller:
Methode 3:
Byte-Array:
quelle
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
doppelt so langsam wie die schnellste.quelle
Python-Strings sind unveränderlich. Sie ändern sie, indem Sie eine Kopie erstellen.
Der einfachste Weg, um das zu tun, was Sie wollen, ist wahrscheinlich:
Das
text[1:]
gibt die Zeichenfolgetext
von Position 1 bis zum Ende zurück. Die Positionen zählen von 0, sodass '1' das zweite Zeichen ist.Bearbeiten: Sie können für jeden Teil der Zeichenfolge dieselbe Technik zum Schneiden von Zeichenfolgen verwenden
Wenn der Buchstabe nur einmal angezeigt wird, können Sie die unten vorgeschlagene Such- und Ersetzungstechnik verwenden
quelle
Ab Python 2.6 und Python 3 können Sie veränderbare Bytearrays verwenden (die im Gegensatz zu Strings elementweise geändert werden können):
edit: str wurde in s geändert
edit2: Wie der Zwei-Bit-Alchemist in den Kommentaren erwähnt hat, funktioniert dieser Code nicht mit Unicode.
quelle
bytearray(s)
nicht seinbytearray(str)
. Zum anderen wird dies ergeben :TypeError: string argument without an encoding
. Wenn Sie eine Codierung angeben, erhalten SieTypeError: an integer is required
. Das ist mit Python 3 oder Python 2 Unicode. Wenn Sie dies in Python 2 (mit einer korrigierten zweiten Zeile) tun, funktioniert dies nicht für Nicht-ASCII-Zeichen, da diese möglicherweise nicht nur ein Byte lang sind. Probieren Sie es auss = 'Héllo'
und Sie werden bekommen'He\xa9llo'
.s = u'abcdefg'
.Wie andere Leute gesagt haben, sollten Python-Strings im Allgemeinen unveränderlich sein.
Wenn Sie jedoch CPython verwenden, die Implementierung auf python.org, können Sie mit ctypes die Zeichenfolgenstruktur im Speicher ändern.
Hier ist ein Beispiel, in dem ich die Technik verwende, um eine Zeichenfolge zu löschen.
Markieren Sie Daten in Python als vertraulich
Ich erwähne dies der Vollständigkeit halber, und dies sollte Ihr letzter Ausweg sein, da es hackisch ist.
quelle
str
ist dies nicht der richtige Typ für Sie. Benutze es einfach nicht. Verwenden Siebytearray
stattdessen so etwas wie . (Besser noch, wickeln Sie es in etwas ein, mit dem Sie es mehr oder weniger als undurchsichtige Daten behandeln können, sodass Sie wirklich keine Daten abrufenstr
können, um sich vor Unfällen zu schützen. Möglicherweise gibt es dafür eine Bibliothek. Keine Ahnung.)Dieser Code gehört nicht mir. Ich konnte mich nicht an das Site-Formular erinnern, wo ich es genommen habe. Interessanterweise können Sie damit ein oder mehrere Zeichen durch ein oder mehrere Zeichen ersetzen. Obwohl diese Antwort sehr spät ist, könnten Anfänger wie ich (jederzeit) sie nützlich finden.
Textfunktion ändern.
quelle
l
.mytext = mytext.replace('l', 'W')
->HeWWo Zorld
mytext = mytext.replace('l', 'W',1)
. Link zu docMit Strings können Sie tatsächlich Folgendes tun:
Grundsätzlich "addiere" ich + "Strings" zu einem neuen String :).
quelle
Wenn Ihre Welt zu 100% ist
ascii/utf-8
(viele Anwendungsfälle passen in diese Box):Python 3.7.3
quelle
Ich möchte eine andere Möglichkeit hinzufügen, ein Zeichen in einer Zeichenfolge zu ändern.
Wie schnell ist es im Vergleich dazu, die Zeichenfolge in eine Liste umzuwandeln und den i-ten Wert zu ersetzen und dann wieder zu verbinden?
Listenansatz
Meine Lösung
quelle