2012-05-17 9 views
58

Me gustaría leer algunos caracteres de una cadena y ponerlos en otra cadena (como hacemos en C).El objeto 'str' no es compatible con la asignación de elementos en Python

Así que mi código es como abajo

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 aplicar el mismo en Python?

+8

Por cierto, no nombrar las variables después de órdenes internas pitón. Si usa 'str' como una variable aquí, no podrá hacer conversiones de cadenas con' str (var_that_is_not_a_string) 'ni escribir comparaciones como' tipo (var_with_unknown_type) == str'. –

Respuesta

47

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

Puede, sin embargo, hacer lo siguiente:

for i in str: 
    srr += i 

Las razones que esto funciona es que se trata de un acceso directo 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.

+0

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

+1

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

+0

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

8

Python strings son inmutables por lo que lo que estás tratando de hacer en C será simplemente imposible en Python. Tendrás que crear una nueva cadena.

me gustaría leer algunos caracteres de una cadena y ponerlo en otra cadena.

A continuación, utilice un trozo de cadena:

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

Como se mencionó Aix - cadenas en Python son inmutables (no se puede cambiar in-situ).

Lo que estamos tratando de hacer se puede hacer de muchas maneras:

# 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

¿Qué hay de esta solución:

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

54

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

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

si realmente quieres.

-3

Hola usted debe tratar el método de cadena dividida:

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

j = 'is not enough' 

print 'The', output[1], j 
Cuestiones relacionadas