L'oggetto 'str' non supporta l'assegnazione di elementi in Python


130

Vorrei leggere alcuni caratteri da una stringa e metterli in un'altra stringa (come facciamo in C).

Quindi il mio codice è come di seguito

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)

In C il codice potrebbe essere

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

Come posso implementare lo stesso in Python?


19
A proposito, non nominare le tue variabili dopo i builtin di Python. Se usi strcome variabile qui, non sarai in grado di eseguire conversioni di stringhe str(var_that_is_not_a_string)o confronti di tipi come type(var_with_unknown_type) == str.
Joel Cornett

Risposte:


100

In Python, le stringhe sono immutabili, quindi non puoi cambiare i loro caratteri sul posto.

Puoi, tuttavia, fare quanto segue:

for i in str:
    srr += i

Il motivo per cui funziona è che è una scorciatoia per:

for i in str:
    srr = srr + i

Quanto sopra crea una nuova stringa con ogni iterazione e memorizza il riferimento a quella nuova stringa in srr.


Quindi se dovessi leggere i caratteri dalla stringa e copiarli da qualche parte, come posso farlo?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: dipende da cosa devi fare con quei personaggi. Nella mia risposta ho mostrato come possono essere aggiunti a un'altra stringa.
NPE

Vorrei scrivere un programma da "Hello world" a "World Hello". Quindi il mio codice dovrebbe cercare lo spazio (''). Quindi stavo cercando aiuto
Rasmi Ranjan Nayak

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

2
@aix: letteralmente a pochi secondi l'uno dall'altro. : D
Joel Cornett

113

Le altre risposte sono corrette, ma puoi, ovviamente, fare qualcosa come:

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

se lo vuoi davvero.


14

Le stringhe Python sono immutabili, quindi ciò che stai cercando di fare in C sarà semplicemente impossibile in Python. Dovrai creare una nuova stringa.

Vorrei leggere alcuni caratteri da una stringa e inserirli in un'altra stringa.

Quindi usa una fetta di stringa:

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

5

Come accennato da aix, le stringhe in Python sono immutabili (non puoi cambiarle al posto giusto).

Quello che stai cercando di fare può essere fatto in molti modi:

# 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

Un altro approccio se si desidera sostituire un personaggio specifico con un altro personaggio:

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

Che ne dici di questa soluzione:

str = "Hello World" (come indicato nel problema) srr = str + ""


-2

Ciao dovresti provare il metodo di divisione delle stringhe:

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

j = 'is not enough'

print 'The', output[1], j
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.