Come eliminare un carattere da una stringa usando Python


458

C'è una stringa, per esempio. EXAMPLE.

Come posso rimuovere il personaggio centrale, cioè Mda esso? Non ho bisogno del codice. Voglio sapere:

  • Le stringhe in Python finiscono con un carattere speciale?
  • Qual è il modo migliore: spostare tutto da destra a sinistra a partire dal personaggio centrale O creare una nuova stringa e non copiare il personaggio medio?

Risposte:


639

In Python, le stringhe sono immutabili, quindi devi creare una nuova stringa. Hai alcune opzioni su come creare la nuova stringa. Se vuoi rimuovere la 'M' ovunque appaia:

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

Se vuoi rimuovere il personaggio centrale:

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

Hai chiesto se le stringhe terminano con un carattere speciale. No, stai pensando come un programmatore C. In Python, le stringhe sono memorizzate con la loro lunghezza, quindi qualsiasi valore di byte, incluso \0, può apparire in una stringa.


16
Dato che l'interrogatore è nuovo di zecca per Python, potrebbe valere la pena notare che mentre nella versione 2.X python l'operatore "/" restituisce un numero intero (troncato verso zero), nella versione 3.X python dovresti usare "//" anziché. Inoltre, la riga from __future__ import divisionall'inizio del tuo script farà funzionare la versione 2.X python come la versione 3.X
Michael Dunn,

1
Nota che se "M" è l'unico contenuto della riga, "" lascia una riga vuota al suo posto.
8bitjunkie,

1
@ 7SpecialGems dipende interamente da cosa fai con questa stringa. Una stringa vuota come ""non implica una linea vuota. Se lo metti in un elenco e lo unisci con le nuove righe, allora creerà una linea vuota, ma ci sono molti altri posti in cui potresti usare una stringa vuota che non lo farà.
Ned Batchelder,

68

Questo è probabilmente il modo migliore:

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

Non preoccuparti di spostare personaggi e cose del genere. La maggior parte del codice Python si svolge su un livello di astrazione molto più elevato.


6
Mpotrebbe non essere unico. In tal caso, questo sostituirà tutte le Ms, giusto?
Lazer,

14
Sì, è corretto. Se si desidera solo sostituire le noccorrenze, utilizzare original.replace("M", "", n).
ricorsivo

1
@ S. Lott Ho pensato che fosse retorico, per suggerire di fornire la soluzione per sostituire solo una sola istanza
Dodgie,

63

Per sostituire una posizione specifica:

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

Per sostituire un carattere specifico:

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

18
Mentre questo può funzionare, penso che la tua risposta potrebbe essere migliorata spiegando cosa sta succedendo nella prima parte, dal momento che le operazioni di sottostringa non sono necessariamente facili da capire per un principiante di Python senza alcuna spiegazione.
jloubert,

Quindi se la lunghezza di s è l. Quindi per la prima parte, il vincolo per pos dovrebbe essere l-1 > pos >= 0.
Haoyu Chen,

s [: pos] ottiene la sottostringa da 0 a pos-1 e s [(pos + 1):] ottiene la sottostringa da pos + 1 alla fine. Quindi, rimuove s [pos] da s.
sabato

non sta sostituendo, sta cadendo. è bene distinguere l'operazione fornendo esempi per entrambi i due casi d'uso principali, separati dal loro metodo di selezione della posizione.
Alexander Stohr,

28

Le stringhe sono immutabili. Ma puoi convertirli in un elenco, che è mutabile, e quindi riconvertire l'elenco in una stringa dopo averlo modificato.

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

Puoi anche creare una nuova stringa, come hanno mostrato altri, prendendo tutto tranne il carattere che desideri dalla stringa esistente.


4
Perché non dovresti semplicemente usare il str.replacemetodo?
alichaudry,

12

Come posso rimuovere il personaggio medio, cioè M da esso?

Non puoi, perché le stringhe in Python sono immutabili .

Le stringhe in Python finiscono con un carattere speciale?

No. Sono simili agli elenchi di personaggi; la lunghezza dell'elenco definisce la lunghezza della stringa e nessun carattere funge da terminatore.

Qual è il modo migliore: spostare tutto da destra a sinistra a partire dal personaggio centrale O creare una nuova stringa e non copiare il personaggio medio?

Non è possibile modificare la stringa esistente, quindi è necessario crearne una nuova contenente tutto tranne il carattere centrale.


11

Usa il translate()metodo:

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

3
Il metodo è cambiato Vedi i documenti per Python 3: translate () Sostituisce caratteri diversi con spazio ( Nonerimuovere sembra non funzionare):translate( str.maketrans("<>", " ") )
gestire

1
In realtà, i documenti specificano due modi per rimuovere caratteri diversi con translate () in Python 3,: str.maketrans( "", "", "<>")estr.maketrans( {"<":None,">":None })
gestire

3
L'equivalente del codice nella risposta è diventato questo in python3:'EXAMPLE'.translate({ord("M"): None})
yoniLavi


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

Come rimuovere un carattere da una stringa: ecco un esempio in cui è presente una pila di carte rappresentate come caratteri in una stringa. Viene disegnato uno di questi (importa il modulo casuale per la funzione random.choice (), che seleziona un carattere casuale nella stringa). Viene creata una nuova stringa, cardsLeft, per contenere le carte rimanenti fornite dalla funzione string (replace) in cui l'ultimo parametro indica che solo una "carta" deve essere sostituita dalla stringa vuota ...


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

L'ho visto da qualche parte qui .


4

Ecco cosa ho fatto per tagliare la "M":

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

2
Funzionerebbe solo questa stringa specifica e non è una soluzione generale.
Andreas Bergström,

3

Se desideri eliminare / ignorare i caratteri in una stringa e, ad esempio, hai questa stringa,

"[11: L: 0]"

da una risposta dell'API Web o qualcosa del genere, come un file CSV, supponiamo che tu stia utilizzando le richieste

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

loop e sbarazzarsi di caratteri indesiderati:

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

Divisione opzionale e sarai in grado di leggere i valori singolarmente:

listofvalues = line.split(':')

Ora accedere a ciascun valore è più semplice:

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

Questo stamperà

11

L

0


3

Per eliminare una charo una sub-string volta (solo la prima occorrenza):

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

NOTA: qui 1può essere sostituito con uno qualsiasi intper il numero di occorrenze che si desidera sostituire.


3

Puoi semplicemente usare la comprensione dell'elenco.

Supponiamo di avere la stringa: my name ise si desidera rimuovere il carattere m. usa il seguente codice:

"".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
Mentre questo frammento di codice può risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
andreas,

0

Un altro modo è con una funzione,

Di seguito è riportato un modo per rimuovere tutte le vocali da una stringa, semplicemente chiamando la funzione

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

-7

Le stringhe sono immutabili in Python, quindi entrambe le opzioni significano sostanzialmente la stessa cosa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.