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?

Rasmi Ranjan Nayak
fuente
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.

NPE
fuente
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.

Crowman
fuente
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!
wim
fuente
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[:]
Burhan Khalid
fuente
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:])
Jean-Emile Leconte II
fuente
0

¿Qué tal esta solución?

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

usuario2643900
fuente
-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
Devzzone
fuente