object does not support 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.
Antworten
qweet
User
Beiträge: 119
Registriert: Freitag 2. September 2005, 21:26

Hallo,

Hab bei dem Code hier:

Code: Alles auswählen

import randomclient

C = randomclient.truerand(10, 'b')

D = C

D[0][1] = 'x'
die Fehlermeldung:
object does not support item assignment

(Anm.: randomclient.truerand(10, 'b') liefert eine Liste mit Zufallszahlen. Das sind dann 10 BLöcke zu je 8 Zufallszahlen)

Gibt es eine Möglichkeit, trotzdem der Liste D, Werte zuzuweisen? Dass vielleicht irgendwo ein Attribut dieses Objektes geändert wird und dann funktioniert das?

mfg,
qweet
BlackJack

Entweder ist `D` keine Liste, oder das erste Element von `D` kann keine Zuweisung in dieser Form. Bist Du sicher das `D` eine "zweidimensionale" Liste ist? Funktioniert ``print D[0][1]`` ohne Fehler?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

qweet hat geschrieben: C = randomclient.truerand(10, 'b')

(Anm.: randomclient.truerand(10, 'b') liefert eine Liste mit Zufallszahlen. Das sind dann 10 BLöcke zu je 8 Zufallszahlen)
Öhm ... versteh ich nicht ganz.

Muss ich mir das etwa so vorstellen?

Code: Alles auswählen

Wenn es eine zweidimensionale Liste ist, wie BlackJack ja auch vermutet, dann müsste es in etwa so aussehen (habe hier beispielhaft Zufallszahlen von 0-9 verwendet).

c= [ [1, 7, 3, 5, 4, 0, 5, 1],
       [1, 2, 0, 7, 5, 5, 3, 1],
       [3, 2, 7, 2, 7, 1, 3, 5],
       [1, 4, 0, 6, 9, 6, 9, 7],
       [6, 9, 5, 9, 5, 0, 9, 6],
       [6, 5, 9, 6, 7, 8, 5, 4],
       [8, 7, 8, 6, 6, 2, 4, 1],
       [5, 9, 6, 0, 4, 8, 1, 6],
       [1, 2, 8, 9, 3, 2, 7, 8],
       [2, 4, 0, 3, 7, 5, 3, 7],
     ]
Hm ... in Verbindung damit, dass du dann eine solche Zahl auf 'x' setzen möchtest, sieht das ganze ein bisschen wie eine Spielfeld-Matrix mit Positionierungspointer aus *g*.

Falls des ganze so aussehen sollte, versuch mal folgendes, und poste das Ergebnis:

Code: Alles auswählen

from pprint import pprint

print "Liste C:"
pprint(C)
print "--------"
print "Liste D:"
pprint(D)
>>Masaru<<
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Ich würde einfach mal auf einen Tuple tippen anstatt auf eine Liste. Die Tuple unterstützen keine zuweisungen :).

gruss Rayo
qweet
User
Beiträge: 119
Registriert: Freitag 2. September 2005, 21:26

Hi, :)

Bei
C und D
handelt es sich definitiv um Listen. Keine Tuples! Jedenfalls ziehe ich das aus der Info des randomclient-modules.

Auch funktioniert print(D[0][1]) ohne Fehler. Ebenso pprint(C) und pprint(D).

pprint(C) gibt bei mir folgende Ausgabe:

Code: Alles auswählen

pprint(C)
['00011111',
 '01001110',
 '01000011',
 '00101110',
 '00101100',
 '10111101',
 '10100110',
 '01110010',
 '10010101',
 '10110111']
Hab das alles in der IDLE-Shell getestet.

mfg,
qweet
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Du kannst die einzelnen Zeichen eines Strings nicht einfach so ändern. Ein String ist immutable (unveränderbar).

kannst ja die Strings in eine Zahl wandeln (sieht nach einer Zahl in Binärdarstellung aus)

print int('01101100',2)

Da kannst du die einzelnen Bits immernoch ändern.

Gruss
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Oder:
- du verwendest ein 2-dimensionales Array
oder
-du schreibst eine Methode, um deine 8'er Zeichenketten Blöcke zu modifzieren, wie z.B.:

Code: Alles auswählen

>>> def new_block(cur_block, index, value):
...    if not isinstance(value, str):
...        value = str(value)
...    if index >= len(cur_block):
...        raise IndexError, "Index out of range"
...    result =  cur_block[0:index] + value + cur_block[index+1:len(cur_block)]
...    return result

>>> C[1] = new_block(C[1], 4, 'x')
>>> pprint(C)
['10000000',
 '1011x010',
 '11110010',
 '11010000',
 '01000000',
 '00111011',
 '00001110',
 '10110011',
 '10010011',
 '10100101']
>>Masaru<<
Antworten