O objeto 'str' não suporta a atribuição de itens no Python


130

Gostaria de ler alguns caracteres de uma string e colocá-la em outra string (como fazemos em C).

Então, meu código é como abaixo

import string
import re
str = "Hello World"
j = 0
srr = ""
for i in str:
    srr[j] = i #'str' object does not support item assignment 
    j = j + 1
print (srr)

Em C, o código pode ser

i = j = 0; 
while(str[i] != '\0')
{
srr[j++] = str [i++];
}

Como posso implementar o mesmo em Python?


19
Btw, não nomeie suas variáveis ​​com base nos python builtins. Se você usar strcomo variável aqui, não poderá fazer conversões de string str(var_that_is_not_a_string)nem comparar comparações como type(var_with_unknown_type) == str.
Joel Cornett

Respostas:


100

No Python, as strings são imutáveis, portanto você não pode alterar os caracteres no local.

Você pode, no entanto, fazer o seguinte:

for i in str:
    srr += i

Os motivos pelos quais isso funciona é que é um atalho para:

for i in str:
    srr = srr + i

O exemplo acima cria uma nova sequência a cada iteração e armazena a referência a essa nova sequência em srr.


Então, se eu quiser ler os caracteres da string e copiá-los em algum lugar, como posso fazer isso?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: Depende do que você precisa fazer com esses personagens. Na minha resposta, mostrei como eles podem ser anexados a outra string.
NPE

Eu gostaria de escrever um programa "Hello world" para "World Hello". Portanto, meu código deve procurar espaço (''). Então, eu estava procurando ajuda
Rasmi Ranjan Nayak

5
@RasmiRanjanNayak:print " ".join(reversed("Hello world".split())).capitalize()
Joel Cornett

2
@aix: Isso foi literalmente dentro de alguns segundos um do outro. : D
Joel Cornett

113

As outras respostas estão corretas, mas você pode, é claro, fazer algo como:

>>> str1 = "mystring"
>>> list1 = list(str1)
>>> list1[5] = 'u'
>>> str1 = ''.join(list1)
>>> print(str1)
mystrung
>>> type(str1)
<type 'str'>

se você realmente quiser.


14

Seqüências de caracteres Python são imutáveis; portanto, o que você está tentando fazer em C será simplesmente impossível em python. Você precisará criar uma nova string.

Gostaria de ler alguns caracteres de uma string e colocá-la em outra string.

Em seguida, use uma fatia de string:

>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print s2
world!

5

Como aix mencionou - as strings no Python são imutáveis ​​(você não pode alterá-las no local).

O que você está tentando fazer pode ser feito de várias maneiras:

# Copy the string

foo = 'Hello'
bar = foo

# Create a new string by joining all characters of the old string

new_string = ''.join(c for c in oldstring)

# Slice and copy
new_string = oldstring[:]

1

Outra abordagem, se você quiser trocar um caractere específico por outro:

def swap(input_string):
   if len(input_string) == 0:
     return input_string
   if input_string[0] == "x":
     return "y" + swap(input_string[1:])
   else:
     return input_string[0] + swap(input_string[1:])

0

Que tal esta solução:

str = "Olá, mundo" (como indicado no problema) srr = str + ""


-2

Oi, você deve tentar o método de divisão de string:

i = "Hello world"
output = i.split()

j = 'is not enough'

print 'The', output[1], j
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.