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"

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'

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)

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. ;-);


7

Einfache Funktion, um dies zu erreichen:

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

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!

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.


0

Python 3.6+ mit F-String:

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

gibt

'1362511338_314'

-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()

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