Добавить строку в определенной позиции в 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]
Рувим Л.
Использование более новой строки в формате: '{0} - {1}'. Format (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'

Я не уверен, как это соотносится с производительностью, но я чувствую, что это проще для глаз, чем другие решения. ;-)

jathanism
источник
7

Простая функция для достижения этой цели:

def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]
vatsug
источник
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!
Jorgesys
источник
8
Почему вы рассчитываете длину строки tho?
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, строка вставки вставляется в правильное место.

Gary02127
источник
0

Python 3.6+ с использованием f-строки:

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

дает

'1362511338_314'
DarinP
источник
-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()
enomad
источник
Мне неясно, откуда берется импортируемая вами библиотека или какой будет вывод.
chrisfs