Fügen Sie in Python eine Zeichenfolge an einer bestimmten Position hinzu

157

Gibt es in Python eine Funktion, mit der ich einen Wert an einer bestimmten Position eines Strings einfügen kann?

Etwas wie das:

"3655879ACB6"dann in Position 4 hinzufügen "-", um zu werden"3655-879ACB6"

Michel Andrade
quelle

Antworten:

272

Python-Strings sind unveränderlich.

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

Es ist jedoch möglich, eine neue Zeichenfolge mit dem eingefügten Zeichen zu erstellen:

>>> s[:4] + '-' + s[4:]
'3558-79ACB6'
Ignacio Vazquez-Abrams
quelle
9
Hinzu kommt, dass Sie negative Indizes verwenden könnten, um eine Position von rechts zu erhalten, z. B.s[:-4]
Reuben L.
Verwenden der neueren Format-String-Sprache: '{0} - {1}'. Format (s [: 4], s [4:])
srock
60

Das scheint sehr einfach zu sein:

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

Wenn Sie jedoch so etwas wie eine Funktion mögen, gehen Sie wie folgt vor:

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

print insert_dash("355879ACB6", 5)
Mario César
quelle
26

Da Zeichenfolgen unveränderlich sind, besteht eine andere Möglichkeit darin, die Zeichenfolge in eine Liste umzuwandeln, die dann indiziert und geändert werden kann, ohne dass Tricks auftreten müssen. Um die Liste jedoch wieder auf eine Zeichenfolge zu bringen, müssen Sie .join()eine leere Zeichenfolge verwenden.

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

Ich bin mir nicht sicher, wie sich dies in Bezug auf die Leistung verhält, aber ich habe das Gefühl, dass es für die Augen einfacher ist als für die anderen Lösungen. ;-);

Nathanismus
quelle
7

Einfache Funktion, um dies zu erreichen:

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

Ich habe eine sehr nützliche Methode entwickelt, um einen String an einer bestimmten Position in Python hinzuzufügen :

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

beispielsweise:

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, '%'))   

wir werden als Ausgabe haben:

-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!
Jorgesys
quelle
8
Warum berechnen Sie die Länge der Zeichenfolge tho?
Yytsi
2
Vielleicht wollte er überprüfen, ob der Index kleiner als die Länge der Zeichenfolge war ... und vergaß dann.
sce
Python verwendet herkömmlicherweise Unterstriche für Funktionsnamen, nicht für Kamel.
Michael Bates
2

Ich denke, die obigen Antworten sind in Ordnung, aber ich würde erklären, dass sie einige unerwartete, aber gute Nebenwirkungen haben ...

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

Wenn der Index pos_i sehr klein (zu negativ) ist, wird der Einfügezeichenfolge vorangestellt. Wenn zu lang, wird die Einfügezeichenfolge angehängt. Wenn pos_i zwischen -len (string_s) und + len (string_s) - 1 liegt, wird der Insert-String an der richtigen Stelle eingefügt.

Gary02127
quelle
0

Python 3.6+ mit F-String:

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

gibt

'1362511338_314'
DarinP
quelle
-3

Wenn Sie viele Einsätze wünschen

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()
Enomad
quelle
Mir ist nicht klar, woher die Bibliothek kommt, die Sie importieren, oder wie die Ausgabe aussehen würde.
chrisfs