Додайте рядок у певному положенні в Python


157

Чи є якась функція в Python, яку я можу використовувати, щоб вставити значення у певне положення рядка?

Щось на зразок цього:

"3655879ACB6"потім у позиції 4 додайте, "-"щоб стати"3655-879ACB6"

Відповіді:


272

Ні. Струни Python незмінні.

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

Використання
мовного мовлення

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
Можливо, він хотів перевірити, чи не було індексу довжиною рядка ... а потім забув.
сцена

Python звичайно використовує регістр підкреслення для імен функцій, а не для верблюда.
Майкл Бейтс

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, рядок вставки вставляється у потрібне місце.


0

Python 3.6 або новішої версії за допомогою f-string:

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

дає

'1362511338_314'

-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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.