560 Stimmen

Wie man mit Python ein Zeichen aus einer Zeichenkette löscht

Es gibt z. B. eine Zeichenkette. EXAMPLE .

Wie kann ich das mittlere Zeichen entfernen, d.h., M von ihr? Ich brauche den Code nicht. Ich möchte es wissen:

  • Endet eine Zeichenkette in Python mit einem Sonderzeichen?
  • Was ist besser - alles von rechts nach links zu verschieben, beginnend mit dem mittleren Zeichen ODER eine neue Zeichenfolge zu erstellen und das mittlere Zeichen nicht zu kopieren?

0 Stimmen

775voto

Ned Batchelder Punkte 342778

In Python sind Zeichenketten unveränderlich, daher müssen Sie eine neue Zeichenkette erstellen. Sie haben mehrere Möglichkeiten, wie Sie die neue Zeichenkette erstellen können. Wenn Sie das 'M' überall entfernen wollen, wo es vorkommt:

newstr = oldstr.replace("M", "")

Wenn Sie die Hauptfigur entfernen möchten:

midlen = len(oldstr) // 2
newstr = oldstr[:midlen] + oldstr[midlen+1:]

Sie haben gefragt, ob Zeichenketten mit einem Sonderzeichen enden. Nein, Sie denken wie ein C-Programmierer. In Python sind Zeichenketten mit ihrer Länge gespeichert so dass jeder Byte-Wert, einschließlich \0 in einer Zeichenkette vorkommen kann.

18 Stimmen

Da der Fragesteller ein absoluter Python-Neuling ist, sollte er wissen, dass der "/"-Operator in Version 2.X Python eine (gegen Null abgeschnittene) Ganzzahl zurückgibt, während in Version 3.X Python stattdessen "//" verwendet werden sollte. Außerdem ist die Zeile from __future__ import division am Anfang Ihres Skripts bewirkt, dass sich Python der Version 2.X wie Version 3.X verhält

1 Stimmen

Wenn "M" der einzige Inhalt der Zeile ist, hinterlässt "" eine leere Zeile an seiner Stelle.

1 Stimmen

@7SpecialGems es hängt ganz davon ab, was du mit dieser Zeichenfolge machst. Eine leere Zeichenkette wie "" impliziert keine leere Zeile. Wenn Sie sie in eine Liste einfügen und mit Zeilenumbrüchen verbinden, entsteht eine leere Zeile, aber es gibt viele andere Stellen, an denen Sie eine leere Zeichenkette verwenden können, ohne dass dies der Fall ist.

88voto

Eton B. Punkte 5803

Um eine bestimmte Position zu ersetzen:

s = s[:pos] + s[(pos+1):]

Um ein bestimmtes Zeichen zu ersetzen:

s = s.replace('M','')

20 Stimmen

Das mag zwar funktionieren, aber ich denke, Ihre Antwort könnte verbessert werden, indem Sie erklären, was im ersten Teil vor sich geht, da die Teilstring-Operationen für einen Python-Neuling ohne Erklärung nicht unbedingt leicht zu verstehen sind.

0 Stimmen

Wenn also die Länge von s l . Für den ersten Teil sollte die Bedingung für pos dann lauten l-1 > pos >= 0 .

0 Stimmen

S[:pos] erhält Teilstring von 0 bis pos-1 und s[(pos+1):] erhält Teilstring von pos+1 bis Ende. Folglich wird s[pos] aus s entfernt.

84voto

recursive Punkte 80517

Dies ist wahrscheinlich der beste Weg:

original = "EXAMPLE"
removed = original.replace("M", "")

Machen Sie sich keine Gedanken über die Verschiebung von Zeichen und dergleichen. Der meiste Python-Code findet auf einer viel höheren Abstraktionsebene statt.

11 Stimmen

M ist möglicherweise nicht eindeutig. In diesem Fall ersetzt dies alle M s, richtig?

22 Stimmen

Ja, das ist richtig. Wenn Sie nur ersetzen wollen n Vorkommnisse, Verwendung original.replace("M", "", n) .

37voto

kindall Punkte 167554

Zeichenketten sind unveränderlich. Sie können sie jedoch in eine Liste konvertieren, die veränderbar ist, und dann die Liste wieder in eine Zeichenkette umwandeln, nachdem Sie sie geändert haben.

s = "this is a string"

l = list(s)  # convert to list

l[1] = ""    # "delete" letter h (the item actually still exists but is empty)
l[1:2] = []  # really delete letter h (the item is actually removed from the list)
del(l[1])    # another way to delete it

p = l.index("a")  # find position of the letter "a"
del(l[p])         # delete it

s = "".join(l)  # convert back to string

Sie können auch eine neue Zeichenkette erstellen, wie andere bereits gezeigt haben, indem Sie alles außer das gewünschte Zeichen aus der vorhandenen Zeichenkette.

5 Stimmen

Warum verwenden Sie nicht einfach die str.replace Methode?

0 Stimmen

Sie können t use str.replace()` zum chirurgischen Ersetzen eines bestimmten Zeichens (z. B. "Zeichen bei Index 10")

13voto

Richard Fearn Punkte 24179

Wie kann ich das mittlere Zeichen, d.h. M, entfernen?

Das geht nicht, denn Strings in Python sind unveränderlich .

Endet eine Zeichenkette in Python mit einem Sonderzeichen?

Nein. Sie ähneln Listen von Zeichen; die Länge der Liste definiert die Länge der Zeichenkette, und kein Zeichen dient als Abschlusszeichen.

Was ist besser - alles von rechts nach links zu verschieben, beginnend mit dem mittleren Zeichen ODER eine neue Zeichenfolge zu erstellen und das mittlere Zeichen nicht zu kopieren?

Sie können die vorhandene Zeichenkette nicht ändern, sondern müssen eine neue Zeichenkette erstellen, die alles außer dem mittleren Zeichen enthält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X