Tambahkan string di posisi tertentu dengan Python

157

Apakah ada fungsi dalam Python yang bisa saya gunakan untuk memasukkan nilai pada posisi string tertentu?

Sesuatu seperti ini:

"3655879ACB6"kemudian di posisi 4 tambahkan "-"menjadi"3655-879ACB6"

Michel Andrade
sumber

Jawaban:

272

Tidak. String Python tidak dapat diubah.

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

Namun, dimungkinkan untuk membuat string baru yang memiliki karakter yang disisipkan:

>>> s[:4] + '-' + s[4:]
'3558-79ACB6'
Ignacio Vazquez-Abrams
sumber
9
Menambah ini, Anda bisa menggunakan indeks negatif untuk mendapatkan posisi dari kanan, misalnyas[:-4]
Reuben L.
Menggunakan format string bahasa yang lebih baru: '{0} - {1}'. Format (s [: 4], s [4:])
srock
60

Ini tampaknya sangat mudah:

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

Namun jika Anda menyukai sesuatu seperti fungsi, lakukan ini:

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

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

Karena string tidak dapat diubah, cara lain untuk melakukannya adalah dengan mengubah string menjadi daftar, yang kemudian dapat diindeks dan dimodifikasi tanpa tipu daya pengiris. Namun, untuk mengembalikan daftar ke string, Anda harus .join()menggunakan string kosong.

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

Saya tidak yakin bagaimana ini membandingkan sejauh kinerja, tetapi saya merasa lebih mudah di mata daripada solusi lainnya. ;-)

jathanisme
sumber
7

Fungsi sederhana untuk mencapai ini:

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

Saya telah membuat metode yang sangat berguna untuk menambahkan string pada posisi tertentu dengan Python :

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

sebagai contoh:

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

kita akan memiliki sebagai output:

-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!
Jorgesys
sumber
8
Kenapa kamu menghitung panjang talinya?
Yytsi
2
Mungkin dia ingin memeriksa indeks kurang dari panjang tali ... dan kemudian lupa.
sce
Python secara konvensional menggunakan case garis bawah untuk nama fungsi, bukan case unta.
Michael Bates
2

Saya pikir jawaban di atas baik-baik saja, tetapi saya akan menjelaskan bahwa ada beberapa efek samping yang tak terduga tapi bagus untuk mereka ...

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

Jika indeks pos_i sangat kecil (terlalu negatif), string yang dimasukkan akan lebih dulu. Jika terlalu lama, string yang dimasukkan akan ditambahkan. Jika pos_i berada di antara -len (string_s) dan + len (string_s) - 1, string yang dimasukkan dimasukkan ke tempat yang benar.

Gary02127
sumber
0

Python 3.6+ menggunakan f-string:

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

memberi

'1362511338_314'
DarinP
sumber
-3

Jika Anda ingin banyak sisipan

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
sumber
Bagi saya tidak jelas dari mana perpustakaan yang Anda impor berasal, atau apa hasilnya.
chrisfs