Existe alguma função no Python que eu possa usar para inserir um valor em uma determinada posição de uma string?
Algo assim:
"3655879ACB6"
então na posição 4 adicione "-"
para se tornar"3655-879ACB6"
Existe alguma função no Python que eu possa usar para inserir um valor em uma determinada posição de uma string?
Algo assim:
"3655879ACB6"
então na posição 4 adicione "-"
para se tornar"3655-879ACB6"
Respostas:
Não. As seqüências de caracteres Python são imutáveis.
>>> s='355879ACB6'
>>> s[4:4] = '-'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
No entanto, é possível criar uma nova sequência que tenha o caractere inserido:
>>> s[:4] + '-' + s[4:]
'3558-79ACB6'
Isso parece muito fácil:
>>> hash = "355879ACB6"
>>> hash = hash[:4] + '-' + hash[4:]
>>> print hash
3558-79ACB6
No entanto, se você gosta de algo como uma função, faça o seguinte:
def insert_dash(string, index):
return string[:index] + '-' + string[index:]
print insert_dash("355879ACB6", 5)
Como as strings são imutáveis, outra maneira de fazer isso seria transformar a string em uma lista, que pode ser indexada e modificada sem nenhum truque de fatiar. No entanto, para retornar a lista a uma string, você precisará usar .join()
uma string vazia.
>>> hash = '355879ACB6'
>>> hashlist = list(hash)
>>> hashlist.insert(4, '-')
>>> ''.join(hashlist)
'3558-79ACB6'
Não tenho certeza de como isso se compara ao desempenho, mas sinto que é mais fácil para os olhos do que as outras soluções. ;-)
Eu criei um método muito útil para adicionar uma string em uma determinada posição no Python :
def insertChar(mystring, position, chartoinsert ):
longi = len(mystring)
mystring = mystring[:position] + chartoinsert + mystring[position:]
return mystring
por exemplo:
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, '%'))
teremos como saída:
-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!
Eu acho que as respostas acima são boas, mas eu explicaria que existem alguns efeitos colaterais inesperados, mas bons para eles ...
def insert(string_s, insert_s, pos_i=0):
return string_s[:pos_i] + insert_s + string_s[pos_i:]
Se o índice pos_i for muito pequeno (muito negativo), a sequência de inserção será anexada. Se for muito longa, a sequência de inserção será anexada. Se pos_i estiver entre -len (string_s) e + len (string_s) - 1, a string de inserção será inserida no local correto.
Se você deseja muitas inserções
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]