Seite 1 von 1

strings und item assignment

Verfasst: Freitag 6. Mai 2005, 18:50
von marco_

Code: Alles auswählen

>>>a = "XXXXXXXXXX"
>>>a[3] = "O"
TypeError: object does not support item assignment
Warum? Er unterstützt es doch:

Code: Alles auswählen

>>>a[3]
'X'
Warum unterstützt er dann kein umändern des Buchstabens, es ist doch ein String und kein Tupel oder ähnliches.

Verfasst: Freitag 6. Mai 2005, 19:11
von mawe
Hi!

Naja, Strings sind halt einfach immutable ;)
Du kannst Deinen String aber einfach in eine List umwandeln:

Code: Alles auswählen

>>> a = "xxx"
>>> list(a)
['x', 'x', 'x']
Jetzt kannst damit machen was Du willst :)

Gruß, mawe

Verfasst: Samstag 7. Mai 2005, 13:28
von CM
Hoi Marco,

wenn Du ins Tutorial unter "strings" nachschaust (unter 3.2.1 in der aktuellen Doku), dann wird Dein Problem dort genau erklärt.

mawes Vorschlag ist ok, aber dann muß man den Umweg über Listen gehen und ggf. wieder in strings umwandeln. Alternativ kannst Du bei komplexen Strings mit regulären Ausdrücken arbeiten (siehe re Modul) oder Du verpackst folgendes in eine kleine Funktion:

Code: Alles auswählen

a = 'xxxxxxxxxxx'
a = a[:2] + 'X' + a[3:]
print a
xxXxxxxxxxx
Dann mußt Du die Stringebene nicht verlassen.

Gruß,
Christian

Verfasst: Samstag 7. Mai 2005, 14:13
von marco_
Danke für die Anregungen und Tipps, bringt mich wirklich weiter.

@CM: Nur das bei deinem Beispiel der Buchstabe eingefügt wird und nicht ersetzt. Die Länge verändert sich also.

Verfasst: Samstag 7. Mai 2005, 14:46
von joe
marco_ hat geschrieben: @CM: Nur das bei deinem Beispiel der Buchstabe eingefügt wird und nicht ersetzt. Die Länge verändert sich also.
Du täuschst dich. Zähl nochmal nach ;-)
joe

Verfasst: Samstag 7. Mai 2005, 15:25
von Leonidas
Und für die Leute die zum Zählen zu faul sind, also Leute wie mich, gibt es len().

Verfasst: Samstag 7. Mai 2005, 16:02
von marco_
Sorry, war wiedermal mein Fehler. Hab vorher sogar len() benutzt, anscheinend ein Fehler meines Unbewussten bzw. der Verstand... :P

Verfasst: Samstag 7. Mai 2005, 16:21
von CM
Nein, tut es nicht. Vielleicht hilft das:

Code: Alles auswählen

a = '0123456789' 
a = a[:2] + 'X' + a[3:] 
print a 
01X3456789
Gruß,
Christian

Verfasst: Samstag 7. Mai 2005, 16:22
von CM
Gott, irgendwie war wohl alles bis zu marcos vorletztem Beitrag bei mir im Cache oder so - jedenfalls habe ich alles danach erst gesehen, als ich den letzen Beitrag abgeschickt habe. Komisch ...

Verfasst: Samstag 7. Mai 2005, 17:53
von jens
Oder so:

Code: Alles auswählen

a = '0123456789'
a = list(a)
a[2] = "X"
a = "".join( a )
print a