strings und item assignment

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

strings und item assignment

Beitragvon marco_ » Freitag 6. Mai 2005, 18:50

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.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 6. Mai 2005, 19:11

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Samstag 7. Mai 2005, 13:28

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
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Samstag 7. Mai 2005, 14:13

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.
joe

Beitragvon joe » Samstag 7. Mai 2005, 14:46

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 7. Mai 2005, 15:25

Und für die Leute die zum Zählen zu faul sind, also Leute wie mich, gibt es len().
My god, it's full of CARs! | Leonidasvoice vs Modvoice
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Samstag 7. Mai 2005, 16:02

Sorry, war wiedermal mein Fehler. Hab vorher sogar len() benutzt, anscheinend ein Fehler meines Unbewussten bzw. der Verstand... :P
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Samstag 7. Mai 2005, 16:21

Nein, tut es nicht. Vielleicht hilft das:

Code: Alles auswählen

a = '0123456789'
a = a[:2] + 'X' + a[3:]
print a
01X3456789


Gruß,
Christian
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Samstag 7. Mai 2005, 16:22

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 ...
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 7. Mai 2005, 17:53

Oder so:

Code: Alles auswählen

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder