Чи є якась функція в Python, яку я можу використовувати, щоб вставити значення у певне положення рядка?
Щось на зразок цього:
"3655879ACB6"
потім у позиції 4 додайте, "-"
щоб стати"3655-879ACB6"
Чи є якась функція в Python, яку я можу використовувати, щоб вставити значення у певне положення рядка?
Щось на зразок цього:
"3655879ACB6"
потім у позиції 4 додайте, "-"
щоб стати"3655-879ACB6"
Відповіді:
Ні. Струни 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'
Це здається дуже просто:
>>> 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)
Оскільки рядки незмінні, іншим способом цього стане перетворення рядка у список, який потім можна індексувати та змінювати без будь-якої хитрості. Однак, щоб повернути список до рядка, вам доведеться використовувати .join()
порожній рядок.
>>> hash = '355879ACB6'
>>> hashlist = list(hash)
>>> hashlist.insert(4, '-')
>>> ''.join(hashlist)
'3558-79ACB6'
Я не впевнений, як це порівнюється з продуктивністю, але я відчуваю, що це легше для очей, ніж інші рішення. ;-)
Я зробив дуже корисний метод, щоб додати рядок до певної позиції в 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!
Я вважаю, що наведені вище відповіді чудові, але я б пояснив, що для них є деякі несподівані, але хороші побічні ефекти ...
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, рядок вставки вставляється у потрібне місце.
Якщо ви хочете багато вставок
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()
s[:-4]