Python'da belirli bir konuma dize ekleyin


157

Python'da bir dizenin belirli bir yerine bir değer eklemek için kullanabileceğim herhangi bir işlev var mı?

Bunun gibi bir şey:

"3655879ACB6"sonra 4. pozisyonda "-"olmak"3655-879ACB6"

Yanıtlar:


272

Hayır. Python Dizeleri değişmezdir.

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

Ancak, eklenen karaktere sahip yeni bir dize oluşturmak mümkündür:

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

9
Buna ek olarak, sağdan bir konum elde etmek için negatif endeksler kullanabilirsiniz, örneğins[:-4]
Reuben L.

Daha yeni biçem dizgisi konusunu kullanma: '{0} - {1}'. Biçim (s [: 4], s [4:])
srock

60

Bu çok kolay görünüyor:

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

Ancak bir işlev gibi bir şey isterseniz şu şekilde yapın:

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

print insert_dash("355879ACB6", 5)

26

Dizeler değişmez olduğundan, bunu yapmanın başka bir yolu, dizeyi bir listeye dönüştürmek olacaktır, bu da daha sonra herhangi bir dilimleme hilesi olmadan dizinlenebilir ve değiştirilebilir. Ancak, listeyi bir dizeye geri almak için .join()boş bir dize kullanarak kullanmanız gerekir .

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

Bunun performansla nasıl karşılaştırıldığından emin değilim, ancak gözlerdeki diğer çözümlerden daha kolay olduğunu hissediyorum. ;-)


7

Bunu yapmak için basit fonksiyon:

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

5

Python belirli bir konumda bir dize eklemek için çok yararlı bir yöntem yaptık :

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

Örneğin:

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

bir çıktı olarak sahip olacağız:

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

8
Neden tho dizesinin uzunluğunu hesaplıyorsunuz?
Yytsi

2
Belki dizinin ipin uzunluđundan daha az olduđunu kontrol etmek istedi ... ve sonra unuttu.
sce

Python geleneksel olarak deve için değil, işlev adları için alt çizgi örneği kullanır.
Michael Bates

2

Yukarıdaki cevapların iyi olduğunu düşünüyorum, ancak onlara beklenmedik ama iyi yan etkiler olduğunu açıklarım ...

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

Pos_i dizini çok küçükse (çok negatif), ekleme dizesi eklenir. Çok uzunsa, ekleme dizesi eklenir. Pos_i -len (string_s) ve + len (string_s) - 1 arasındaysa, ekleme dizesi doğru yere eklenir.


0

F-string kullanarak Python 3.6+:

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

verir

'1362511338_314'

-3

Çok sayıda kesici uç istiyorsanız

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

İçe aktardığınız kütüphanenin nereden geldiği veya çıktının ne olacağı net değil.
chrisfs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.