เพิ่มสตริงในตำแหน่งที่แน่นอนใน Python


157

มีฟังก์ชันใดใน Python ที่ฉันสามารถใช้เพื่อแทรกค่าในตำแหน่งที่แน่นอนของสตริงหรือไม่?

บางสิ่งเช่นนี้

"3655879ACB6"จากนั้นในตำแหน่ง 4 เพิ่ม"-"เป็น"3655-879ACB6"

คำตอบ:


272

ไม่ Python Strings ไม่เปลี่ยนรูป

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

อย่างไรก็ตามเป็นไปได้ที่จะสร้างสตริงใหม่ที่มีอักขระที่แทรกไว้:

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

9
การเพิ่มในส่วนนี้คุณสามารถใช้ดัชนีลบเพื่อรับตำแหน่งจากด้านขวาเช่นs[:-4]
Reuben L.

การใช้สำนวนสตริงรูปแบบที่ใหม่กว่า: '{0} - {1}' รูปแบบ (s [: 4], s [4:])
srock

60

ดูเหมือนง่ายมาก:

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

อย่างไรก็ตามถ้าคุณชอบบางสิ่งบางอย่างเช่นฟังก์ชั่นทำเช่นนี้:

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

print insert_dash("355879ACB6", 5)

26

เมื่อสตริงไม่สามารถเปลี่ยนแปลงได้อีกวิธีหนึ่งในการทำเช่นนี้คือเปลี่ยนสตริงให้เป็นรายการซึ่งสามารถทำดัชนีและปรับเปลี่ยนได้โดยไม่ต้องใช้เล่ห์อุบายใด ๆ อย่างไรก็ตามเพื่อให้รายการกลับมาเป็นสตริงคุณต้องใช้.join()โดยใช้สตริงว่าง

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

ฉันไม่แน่ใจว่าสิ่งนี้เปรียบเทียบได้อย่างไรกับการแสดง แต่ฉันรู้สึกว่ามันง่ายต่อสายตามากกว่าวิธีอื่น ๆ ;-)


7

ฟังก์ชั่นง่าย ๆ ที่จะทำให้สิ่งนี้สำเร็จ:

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

5

ฉันได้ทำวิธีที่มีประโยชน์มากในการเพิ่มสตริงในตำแหน่งที่แน่นอนใน Python :

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

ตัวอย่างเช่น:

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

เราจะได้เป็นเอาท์พุท:

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

8
คุณคำนวณความยาวของสตริงทำไม?
Yytsi

2
บางทีเขาต้องการตรวจสอบว่าดัชนีมีความยาวน้อยกว่าความยาวของสตริง ... แล้วลืมไป
sce

Python ใช้เครื่องหมายขีดเส้นใต้ตามตัวอักษรสำหรับชื่อฟังก์ชันไม่ใช่ตัวอูฐ
Michael Bates

2

ฉันคิดว่าคำตอบข้างต้นนั้นใช้ได้ แต่ฉันจะอธิบายว่ามีผลข้างเคียงที่ไม่คาดคิด แต่ที่ดีสำหรับพวกเขา ...

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

หากดัชนี pos_i มีขนาดเล็กมาก (ลบมากเกินไป) สตริงการแทรกจะได้รับการต่อเติม หากยาวเกินไปสตริงแทรกจะถูกต่อท้าย หาก pos_i อยู่ระหว่าง -len (string_s) และ + len (string_s) - 1 สตริงแทรกจะถูกแทรกลงในตำแหน่งที่ถูกต้อง



-3

หากคุณต้องการเม็ดมีดจำนวนมาก

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

ยังไม่ชัดเจนสำหรับฉันว่าไลบรารีที่คุณกำลังนำเข้ามาจากไหนหรือสิ่งที่จะเป็นผลลัพธ์
chrisfs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.