die Veränderung eines Zeichens in einem string in Python
Was ist der einfachste Weg, in Python zu ersetzen von Zeichen in einem string ?
Beispiel:
text = "abcdefg";
text[1] = "Z";
^
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht ändern strings.
Arbeit mit Ihnen als Listen; drehen Sie Sie in strings nur bei Bedarf.
Python-strings sind unveränderlich (D. H. Sie können nicht geändert werden). Es gibt viel Gründe. Die Listen verwenden, bis Sie keine andere Wahl haben, erst dann schalten Sie Sie in strings.
MID
aufgrund Scheiben:s[:index] + c + s[index+1:]
Schnellste Methode?
Gibt es drei Möglichkeiten. Für die Geschwindigkeit Suchenden empfehle ich 'Methode 2'
Methode 1
Gegeben, die von dieser Antwort
Ist ziemlich langsam im Vergleich zur 'Methode 2'
Methode 2 (SCHNELLE METHODE)
Gegeben, die von dieser Antwort
Schneller ist:
Methode 3:
Byte-array:
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
doppelt so langsam wie der Schnellste.Python-strings sind unveränderlich, weshalb Sie Sie ändern, indem Sie eine Kopie.
Der einfachste Weg, das zu tun, was Sie wollen, ist wahrscheinlich.
Text[1:] return den string im text von position 1 bis zum Ende, Positionen zählen von 0, so dass '1' ist der zweite Charakter.
Bearbeiten:
Sie können die gleiche string-slicing-Technik, die für einen Teil der Zeichenfolge
Oder wenn der Brief nur erscheint, wenn Sie können, verwenden Sie die suchen-und-ersetzen-Technik vorgeschlagen
unten
Beginnend mit python 2.6 und python 3 können Sie bytearrays, welche wandelbar ist (kann geändert werden element-Weise im Gegensatz zu strings):
edit: Geändert, str s
edit2: Als Zwei-Bit-Alchemist erwähnt in den Kommentaren, dieser code funktioniert nicht mit unicode.
bytearray(s)
, nichtbytearray(str)
. Für ein anderes, das wird produzieren:TypeError: string argument without an encoding
. Wenn Sie geben Sie eine Codierung, dann bekommen SieTypeError: an integer is required
. Das ist mit Python 3 und Python 2: unicode. Wenn Sie dies tun, in Python 2 (mit einer korrigierten zweiten Zeile), funktioniert es nicht für nicht-ASCII-Zeichen enthalten, weil Sie möglicherweise nicht nur ein byte. Versuchen Sie es mits = 'Héllo'
und Sie erhalten'He\xa9llo'
.s = u'abcdefg'
.Wie andere Leute gesagt haben, im Allgemeinen Python-strings sein sollen unveränderlich sein.
Jedoch, wenn Sie mit CPython, die Umsetzung an python.org es ist möglich, mit ctypes zu ändern, die-Schnur-Struktur im Speicher.
Hier ist ein Beispiel, wo ich die Technik zum löschen einer Zeichenfolge.
Markieren Sie die Daten, die als sensibel in python
Ich erwähne dies der Vollständigkeit halber, und dies sollte Ihre Letzte Ausweg, wie es ist hackish.
str
ist nicht der richtige Typ für Sie. Einfach nicht benutzen. Verwenden Sie so etwas wiebytearray
statt. (Noch besser, wickeln Sie es in etwas, das können Sie behandeln es mehr oder weniger als eine undurchsichtige Daten, so dass Sie wirklich in der nicht abrufen einerstr
aus, um Sie zu schützen vor Unfällen. Möglicherweise gibt es eine Bibliothek dafür. Keine Ahnung.)Eigentlich mit Zeichenfolgen, die Sie tun können, so etwas wie dieses:
Im Grunde bin ich "hinzufügen"+"strings" zusammen in einen neuen string :).
Dieser code ist nicht von mir. Ich konnte mich nicht erinnern, das Website-Formular, wo ich es gemacht habe. Interessanterweise können Sie diese zu ersetzen ein Zeichen oder mehr mit einem oder mehreren charectors.
Wenn diese Antwort sehr spät, Anfänger wie mich (jederzeit) Sie nützlich finden könnten.
Text ändern-Funktion.
l
.mytext = mytext.replace('l', 'W')
->HeWWo Zorld
mytext = mytext.replace('l', 'W',1)
. Link zu docEinen sehr einfachen Weg, dies zu tun:
Ausgabe:
o
(inWorld
), an index 7:word = word.replace(word[7], "Z", 1)
ErträgeHelZo World!
. Sie ersetzen die ersten characted, das identisch ist zu der, die Sie ersetzen möchten.