So löschen Sie ein Zeichen mit Python aus einer Zeichenfolge


457

Es gibt zum Beispiel eine Zeichenfolge. EXAMPLE.

Wie kann ich das mittlere Zeichen entfernen, dh daraus entfernen M? Ich brauche den Code nicht. Ich möchte es wissen:

  • Beenden Zeichenfolgen in Python mit einem Sonderzeichen?
  • Was ist ein besserer Weg - alles von rechts nach links zu verschieben, beginnend mit dem mittleren Zeichen ODER der Erstellung einer neuen Zeichenfolge und nicht das Kopieren des mittleren Zeichens?

Antworten:


639

In Python sind Zeichenfolgen unveränderlich, daher müssen Sie eine neue Zeichenfolge erstellen. Sie haben einige Möglichkeiten, wie Sie die neue Zeichenfolge erstellen können. Wenn Sie das 'M' entfernen möchten, wo immer es erscheint:

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

Wenn Sie das zentrale Zeichen entfernen möchten:

midlen = len(oldstr)/2   # //2 in python 3
newstr = oldstr[:midlen] + oldstr[midlen+1:]

Sie haben gefragt, ob Zeichenfolgen mit einem Sonderzeichen enden. Nein, Sie denken wie ein C-Programmierer. In Python werden Zeichenfolgen mit ihrer Länge gespeichert, sodass jeder Bytewert, einschließlich \0, in einer Zeichenfolge angezeigt werden kann.


16
Da der Fragesteller für Python brandneu ist, ist es möglicherweise erwähnenswert, dass in Version 2.X Python der Operator "/" eine Ganzzahl (gegen Null abgeschnitten) zurückgibt. In Version 3.X sollten Sie "//" verwenden. stattdessen. Außerdem wird die Zeile from __future__ import divisionam Anfang Ihres Skripts Python der Version 2.X wie Version 3.X verhalten
Michael Dunn

1
Beachten Sie, dass, wenn "M" der einzige Inhalt der Zeile ist, "" an seiner Stelle eine leere Zeile zurückbleibt.
8bitjunkie

1
@ 7SpecialGems es hängt ganz davon ab, was Sie mit dieser Zeichenfolge machen. Eine leere Zeichenfolge wie ""impliziert keine leere Zeile. Wenn Sie es in eine Liste einfügen und mit Zeilenumbrüchen verbinden, wird eine leere Zeile erstellt, aber es gibt viele andere Stellen, an denen Sie möglicherweise eine leere Zeichenfolge verwenden, die dies nicht tut.
Ned Batchelder

68

Dies ist wahrscheinlich der beste Weg:

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

Mach dir keine Sorgen über das Verschieben von Charakteren und so. Der meiste Python-Code findet auf einer viel höheren Abstraktionsebene statt.


6
Mist möglicherweise nicht eindeutig. In diesem Fall werden dadurch alle Ms ersetzt, oder?
Lazer

14
Ja das ist richtig. Wenn Sie nur nVorkommen ersetzen möchten , verwenden Sie original.replace("M", "", n).
rekursiv

1
@ S.Lott Ich nahm das als rhetorisch, um vorzuschlagen, die Lösung
bereitzustellen

63

So ersetzen Sie eine bestimmte Position:

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

So ersetzen Sie ein bestimmtes Zeichen:

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

18
Dies 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 Teilzeichenfolgenoperationen für einen Python-Neuling ohne Erklärung nicht unbedingt leicht zu verstehen sind.
Jloubert

Also wenn die Länge von s ist l. Dann sollte für den ersten Teil die Einschränkung für pos sein l-1 > pos >= 0.
Haoyu Chen

s [: pos] erhält Teilzeichenfolge von 0 bis pos-1 und s [(pos + 1):] erhält Teilzeichenfolge von pos + 1 bis zum Ende. Daher wird s [pos] von s entfernt.
Uhr

es ersetzt nicht, es fällt. Es ist gut, die Operation zu unterscheiden, indem Beispiele für beide der beiden Hauptanwendungsfälle bereitgestellt werden, die durch ihre Positionsauswahlmethode getrennt sind.
Alexander Stohr

28

Saiten sind unveränderlich. Sie können sie jedoch in eine veränderbare Liste konvertieren und die Liste nach dem Ändern wieder in eine Zeichenfolge konvertieren.

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 Zeichenfolge erstellen, wie andere gezeigt haben, indem Sie alles außer dem gewünschten Zeichen aus der vorhandenen Zeichenfolge übernehmen.


4
Warum würden Sie nicht einfach die str.replaceMethode anwenden?
Alichaudry

12

Wie kann ich das mittlere Zeichen, dh M, entfernen?

Sie können nicht, weil Zeichenfolgen in Python unveränderlich sind .

Beenden Zeichenfolgen in Python mit einem Sonderzeichen?

Nein. Sie ähneln Listen von Zeichen. Die Länge der Liste definiert die Länge der Zeichenfolge, und kein Zeichen fungiert als Abschlusszeichen.

Was ist ein besserer Weg - alles von rechts nach links zu verschieben, beginnend mit dem mittleren Zeichen ODER der Erstellung einer neuen Zeichenfolge und nicht das Kopieren des mittleren Zeichens?

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


11

Verwenden Sie die translate()Methode:

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'

3
Die Methode hat sich geändert. Siehe die Dokumente für Python 3: translate () Dies ersetzt verschiedene Zeichen durch Leerzeichen ( Nonezu entfernen scheint nicht zu funktionieren):translate( str.maketrans("<>", " ") )
behandeln

1
Tatsächlich geben die Dokumente zwei Möglichkeiten an, um verschiedene Zeichen mit translate () in Python 3 zu entfernen: str.maketrans( "", "", "<>")undstr.maketrans( {"<":None,">":None })
behandeln

3
Das Äquivalent des Codes in der Antwort wurde dies in Python3:'EXAMPLE'.translate({ord("M"): None})
YoniLavi


6
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

So entfernen Sie ein Zeichen aus einer Zeichenfolge: In diesem Beispiel wird ein Kartenstapel als Zeichen in einer Zeichenfolge dargestellt. Eine davon wird gezeichnet (Zufallsmodul für die Funktion random.choice () importieren, die ein zufälliges Zeichen in der Zeichenfolge auswählt). Eine neue Zeichenfolge, cardLeft, wird erstellt, um die verbleibenden Karten der Zeichenfolgenfunktion replace () aufzunehmen, wobei der letzte Parameter angibt, dass nur eine "Karte" durch die leere Zeichenfolge ersetzt werden soll ...


6
def kill_char(string, n): # n = position of which character you want to remove
    begin = string[:n]    # from beginning to n (n not included)
    end = string[n+1:]    # n+1 through end of string
    return begin + end
print kill_char("EXAMPLE", 3)  # "M" removed

Ich habe das irgendwo hier gesehen .


4

Folgendes habe ich getan, um das "M" herauszuschneiden:

s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]

2
Dies würde nur für diese bestimmte Zeichenfolge funktionieren und ist keine allgemeine Lösung.
Andreas Bergström

3

Wenn Sie Zeichen in einer Zeichenfolge löschen / ignorieren möchten und beispielsweise diese Zeichenfolge haben,

[11: L: 0]

Nehmen wir an, Sie verwenden Anforderungen aus einer Web-API-Antwort oder ähnlichem, z. B. einer CSV-Datei

import requests
udid = 123456
url = 'http://webservices.yourserver.com/action/id-' + udid
s = requests.Session()
s.verify = False
resp = s.get(url, stream=True)
content = resp.content

Schleife und entfernen Sie unerwünschte Zeichen:

for line in resp.iter_lines():
  line = line.replace("[", "")
  line = line.replace("]", "")
  line = line.replace('"', "")

Optionale Aufteilung, und Sie können die Werte einzeln lesen:

listofvalues = line.split(':')

Jetzt ist der Zugriff auf jeden Wert einfacher:

print listofvalues[0]
print listofvalues[1]
print listofvalues[2]

Dies wird gedruckt

11

L.

0


3

So löschen Sie ein charoder ein sub-string einmaliges (nur das erste Vorkommen):

main_string = main_string.replace(sub_str, replace_with, 1)

HINWEIS: Hier 1kann intfür die Anzahl der Vorkommen, die Sie ersetzen möchten, eine beliebige ersetzt werden.


3

Sie können einfach das Listenverständnis verwenden.

Angenommen, Sie haben die Zeichenfolge: my name isund möchten das Zeichen entfernen m. Verwenden Sie den folgenden Code:

"".join([x for x in "my name is" if x is not 'm'])

0
from random import randint


def shuffle_word(word):
    newWord=""
    for i in range(0,len(word)):
        pos=randint(0,len(word)-1)
        newWord += word[pos]
        word = word[:pos]+word[pos+1:]
    return newWord

word = "Sarajevo"
print(shuffle_word(word))

2
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
Andreas

0

Ein anderer Weg ist mit einer Funktion,

Im Folgenden finden Sie eine Möglichkeit, alle Vokale aus einer Zeichenfolge zu entfernen, indem Sie einfach die Funktion aufrufen

def disemvowel(s):
    return s.translate(None, "aeiouAEIOU")

-7

Strings sind in Python unveränderlich, sodass beide Optionen im Grunde dasselbe bedeuten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.