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"

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'

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)

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


7

Fungsi sederhana untuk mencapai ini:

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

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!

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.


0

Python 3.6+ menggunakan f-string:

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

memberi

'1362511338_314'

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

Bagi saya tidak jelas dari mana perpustakaan yang Anda impor berasal, atau apa hasilnya.
chrisfs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.