Thêm chuỗi ở một vị trí nhất định trong Python


157

Có bất kỳ hàm nào trong Python mà tôi có thể sử dụng để chèn một giá trị vào một vị trí nhất định của chuỗi không?

Một cái gì đó như thế này:

"3655879ACB6"sau đó ở vị trí 4 thêm "-"để trở thành"3655-879ACB6"

Câu trả lời:


272

Số Python Chuỗi là bất biến.

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

Tuy nhiên, có thể tạo một chuỗi mới có ký tự được chèn:

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

9
Thêm vào đó, bạn có thể sử dụng chỉ số tiêu cực để có được một vị trí từ cánh phải, ví dụ nhưs[:-4]
Reuben L.

Sử dụng cách nói chuỗi định dạng mới hơn: '{0} - {1}'. Format (s [: 4], s [4:])
srock

60

Điều này có vẻ rất dễ dàng:

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

Tuy nhiên nếu bạn thích một cái gì đó giống như một chức năng, hãy làm như sau:

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

print insert_dash("355879ACB6", 5)

26

Vì các chuỗi là bất biến nên một cách khác để làm điều này là biến chuỗi thành một danh sách, sau đó có thể được lập chỉ mục và sửa đổi mà không cần bất kỳ thủ thuật cắt lát nào. Tuy nhiên, để đưa danh sách trở lại một chuỗi bạn phải sử dụng .join()bằng một chuỗi trống.

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

Tôi không chắc làm thế nào điều này so sánh về hiệu suất, nhưng tôi cảm thấy nó dễ nhìn hơn các giải pháp khác. ;-)


7

Chức năng đơn giản để thực hiện điều này:

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

5

Tôi đã thực hiện một phương thức rất hữu ích để thêm một chuỗi ở một vị trí nhất định trong Python :

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

ví dụ:

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

chúng ta sẽ có một đầu ra:

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

8
Tại sao bạn tính độ dài của chuỗi tho?
Yytsi

2
Có lẽ anh ta muốn kiểm tra chỉ số nhỏ hơn độ dài của chuỗi ... và sau đó quên.
sce

Python thường sử dụng trường hợp gạch dưới cho tên hàm, không phải trường hợp lạc đà.
Michael Bates

2

Tôi nghĩ rằng các câu trả lời trên là tốt, nhưng tôi sẽ giải thích rằng có một số tác dụng phụ không mong muốn nhưng tốt cho họ ...

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

Nếu chỉ số pos_i rất nhỏ (quá âm), chuỗi chèn sẽ được thêm trước. Nếu quá dài, chuỗi chèn sẽ được nối thêm. Nếu pos_i nằm giữa -len (string_s) và + len (string_s) - 1, chuỗi chèn được chèn vào đúng vị trí.


0

Python 3.6+ sử dụng chuỗi f:

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

cho

'1362511338_314'

-3

Nếu bạn muốn chèn nhiều

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

Tôi không rõ thư viện bạn đang nhập đến từ đâu, hoặc đầu ra sẽ là gì.
chrisfs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.