Aggiungi stringa in una determinata posizione in Python


157

Esiste una funzione in Python che posso usare per inserire un valore in una determinata posizione di una stringa?

Qualcosa come questo:

"3655879ACB6"quindi in posizione 4 aggiungi "-"per diventare"3655-879ACB6"

Risposte:


272

No. Le stringhe di Python sono immutabili.

>>> s='355879ACB6'
>>> s[4:4] = '-'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Tuttavia, è possibile creare una nuova stringa con il carattere inserito:

>>> s[:4] + '-' + s[4:]
'3558-79ACB6'

9
Aggiungendo a ciò, è possibile utilizzare indici negativi per ottenere una posizione da destra, ad es.s[:-4]
Reuben L.

Usando il linguaggio di stringhe più nuovo formato: '{0} - {1}'. Format (s [: 4], s [4:])
srock

60

Questo sembra molto semplice:

>>> hash = "355879ACB6"
>>> hash = hash[:4] + '-' + hash[4:]
>>> print hash
3558-79ACB6

Tuttavia, se ti piace qualcosa come una funzione, fai come segue:

def insert_dash(string, index):
    return string[:index] + '-' + string[index:]

print insert_dash("355879ACB6", 5)

26

Dato che le stringhe sono immutabili, un altro modo per farlo sarebbe quello di trasformare la stringa in un elenco, che può quindi essere indicizzato e modificato senza alcun trucco. Tuttavia, per riportare l'elenco in una stringa dovresti usare .join()usando una stringa vuota.

>>> hash = '355879ACB6'
>>> hashlist = list(hash)
>>> hashlist.insert(4, '-')
>>> ''.join(hashlist)
'3558-79ACB6'

Non sono sicuro di come questo possa essere paragonato alle prestazioni, ma penso che sia più facile per gli occhi rispetto alle altre soluzioni. ;-)


7

Funzione semplice per raggiungere questo obiettivo:

def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]

5

Ho creato un metodo molto utile per aggiungere una stringa in una certa posizione in Python :

def insertChar(mystring, position, chartoinsert ):
    longi = len(mystring)
    mystring   =  mystring[:position] + chartoinsert + mystring[position:] 
    return mystring  

per esempio:

a = "Jorgesys was here!"

def insertChar(mystring, position, chartoinsert ):
    longi = len(mystring)
    mystring   =  mystring[:position] + chartoinsert + mystring[position:] 
    return mystring   

#Inserting some characters with a defined position:    
print(insertChar(a,0, '-'))    
print(insertChar(a,9, '@'))    
print(insertChar(a,14, '%'))   

avremo come output:

-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!

8
Perché calcoli la lunghezza della stringa?
Yytsi,

2
Forse voleva controllare che l'indice fosse inferiore alla lunghezza della stringa ... e poi ha dimenticato.
sce

Python utilizza convenzionalmente il carattere di sottolineatura per i nomi delle funzioni, non il caso di cammello.
Michael Bates,

2

Penso che le risposte di cui sopra vadano bene, ma spiegherei che ci sono alcuni effetti collaterali inaspettati ma buoni per loro ...

def insert(string_s, insert_s, pos_i=0):
    return string_s[:pos_i] + insert_s + string_s[pos_i:]

Se l'indice pos_i è molto piccolo (troppo negativo), la stringa di inserimento viene anteposta. Se troppo lungo, la stringa di inserimento viene aggiunta. Se pos_i è compreso tra -len (string_s) e + len (string_s) - 1, la stringa di inserimento viene inserita nella posizione corretta.


0

Python 3.6+ usando f-string:

mys = '1362511338314'
f"{mys[:10]}_{mys[10:]}"

'1362511338_314'

-3

Se vuoi molti inserti

from rope.base.codeanalyze import ChangeCollector

c = ChangeCollector(code)
c.add_change(5, 5, '<span style="background-color:#339999;">')
c.add_change(10, 10, '</span>')
rend_code = c.get_changed()

Non mi è chiaro da dove provenga la libreria che stai importando o quale sarebbe l'output.
chrisfs,
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.