El objeto 'str' no admite la asignación de elementos en Python


130

Me gustaría leer algunos caracteres de una cadena y ponerlos en otra cadena (como hacemos en C).

Entonces mi código es el siguiente

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)

En C, el código puede ser

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

¿Cómo puedo implementar lo mismo en Python?


19
Por cierto, no nombre sus variables después de las incorporaciones de Python. Si lo usa strcomo una variable aquí, no podrá realizar conversiones de cadenas str(var_that_is_not_a_string)o comparaciones de tipos como type(var_with_unknown_type) == str.
Joel Cornett

Respuestas:


100

En Python, las cadenas son inmutables, por lo que no puede cambiar sus caracteres en el lugar.

Sin embargo, puede hacer lo siguiente:

for i in str:
    srr += i

La razón por la que esto funciona es que es un atajo para:

for i in str:
    srr = srr + i

Lo anterior crea una nueva cadena con cada iteración y almacena la referencia a esa nueva cadena en srr.


Entonces, si pudiera leer los caracteres de la cadena y copiarlos en algún lugar, ¿cómo puedo hacer eso?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: Depende de lo que necesites hacer con esos personajes. En mi respuesta, he mostrado cómo se pueden agregar a otra cadena.
NPE

Me gustaría escribir un programa "Hola mundo" para "Hola mundo". Entonces mi código debería buscar espacio (''). Así que estaba buscando ayuda
Rasmi Ranjan Nayak

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

2
@aix: Eso fue literalmente a unos pocos segundos de diferencia. : D
Joel Cornett

113

Las otras respuestas son correctas, pero, por supuesto, puede hacer algo como:

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

Si de verdad quieres.


14

Las cadenas de Python son inmutables, por lo que lo que está intentando hacer en C será simplemente imposible en Python. Tendrá que crear una nueva cadena.

Me gustaría leer algunos caracteres de una cadena y ponerlos en otra cadena.

Luego usa una rebanada de cuerda:

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

5

Como mencionó aix, las cadenas en Python son inmutables (no puede cambiarlas en su lugar).

Lo que está intentando hacer se puede hacer de muchas formas:

# 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

Otro enfoque si desea intercambiar un personaje específico por otro personaje:

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

¿Qué tal esta solución?

str = "Hola mundo" (como se indica en el problema) srr = str + ""


-2

Hola, deberías probar el método de división de cadenas:

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

j = 'is not enough'

print 'The', output[1], j
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.