Adicionar string em uma certa posição no Python


157

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:


272

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'

9
Adicionando a isso, você pode usar índices negativos para obter uma posição da direita, por exemplos[:-4]
Reuben L.

Usando o formato mais recente de linguagem de strings: '{0} - {1}'. Format (s [: 4], s [4:])
srock

60

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)

26

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


7

Função simples para fazer isso:

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

5

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!

8
Por que você calcula o comprimento da string tho?
Yytsi 10/08/16

2
Talvez ele quisesse verificar se o índice era menor que o comprimento da corda ... e depois esqueceu.
sce

O Python convencionalmente usa maiúsculas e minúsculas para nomes de funções, não camel case.
Michael Bates

2

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.


0

Python 3.6+ usando f-string:

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

'1362511338_314'

-3

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

Não está claro para mim de onde vem a biblioteca que você está importando ou qual seria a saída.
chrisfs
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.