Seite 1 von 1
what's wong with that syntax?
Verfasst: Mittwoch 9. Dezember 2009, 14:37
von thomas15
hi alle,
was ist hier falsch?
a = [[]]*10;
a[1].append(1);
In [9]: a
Out[9]: [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
ich will nicht alle fuellen, sondern nur in die 2. liste einfuegen...
viellen dank schonmal in vorraus!
----------------
Python 2.5.4 (r254:67916, Sep 24 2009, 13:11:33)
Type "copyright", "credits" or "license" for more information.
IPython 0.9.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
Verfasst: Mittwoch 9. Dezember 2009, 14:44
von CM
Magst Du vielleicht Code-Tags benutzen?
Zur Frage:
Code: Alles auswählen
In [1]: a = [[]]*10
In [2]: a[0] is a[1]
Out[2]: True
In [3]: b = [[], []]
In [4]: b[0] is b[1]
Out[4]: False
Und warum machst du ';' hinter Zeilen?
HTH
Christian
Verfasst: Mittwoch 9. Dezember 2009, 14:53
von thomas15
Magst Du vielleicht Code-Tags benutzen?
Zur Frage:
Code: Alles auswählen
In [1]: a = [[]]*10
In [2]: a[0] is a[1]
Out[2]: True
In [3]: b = [[], []]
In [4]: b[0] is b[1]
Out[4]: False
Ich will die inneren listen unterschiedlich wachsen lassen.
So dass z.B.
Code: Alles auswählen
In [1]: len(a[1])
Out[2]: 10
In [3]: len(a[2])
Out[4]: 14
Und warum machst du ';' hinter Zeilen?
- Alte C,Java und vor allem Matlab Angewohnheit.
HTH
Christian
Verfasst: Mittwoch 9. Dezember 2009, 15:08
von Dauerbaustelle
CM, etwas Erklärung wäre da schon ganz gut. thomas15, das Problem ist, dass a[x] für alle gültigen x in deinem Beispiel immer das gleiche Objekt ist:
Code: Alles auswählen
>>> a = [[]]*3
>>> a[0] is a[1] is a[2]
True
>>> a[0].append('foo')
>>> a[0]
['foo']
>>> a[1]
['foo']
Siehe auch "mutable/immutable objects".
Was du willst ist
...aber das kommt mir eh ein wenig seltsam vor, sowas lässt man dynamisch wachsen und macht nicht gleich am Anfang N Listen. Und bevor du mit verschachtelten Listen anfängst rumzumurksen, bau dir lieber gleich Klassen ;-)
Verfasst: Mittwoch 9. Dezember 2009, 15:11
von gkuhl
In Python ist jeder Name ein Pointer auf ein Objekt, wie Christian schon angedeutet hat. In deinem Fall hast du zehn Namen (a[0], a[1], ... a[9]) an das gleiche Objekt gebunden. Um das zu umgehen kannst du Listening Comprehension verwenden:
Grüße
Gerrit
Edit: Zu langsam

Verfasst: Mittwoch 9. Dezember 2009, 15:21
von thomas15
CM, etwas Erklärung wäre da schon ganz gut. thomas15, das Problem ist, dass a[x] für alle gültigen x in deinem Beispiel immer das gleiche Objekt ist:
Ok, ich habe N klassen, wobei ich nicht weiss wievielle Objekte in einer Klasse i stecken. Ich will eigenschaften der Objekte vergleichen, deswegen will ich sie sammeln und dann numerisch verarbeiten
Und bevor du mit verschachtelten Listen anfängst rumzumurksen, bau dir lieber gleich Klassen

In dem Fall zu aufwendig, will schnelles Ergebniss und kein Deluxe Softwareengineering Produkt.
Trotzdem, viellen dank fuer
kannte ich noch nicht. Was heiss das _ in dem Fall?
Danke euch beiden fuer die Hilfe!
Verfasst: Mittwoch 9. Dezember 2009, 15:31
von cofi
gkuhl hat geschrieben:Um das zu umgehen kannst du Listening Comprehension verwenden
Das war was anderes
Der `_` wird haeufig als Platzhalter fuer uninteressante Namen benutzt. Im interaktiven Interpreter steht er aber fuer den letzten Rueckgabewert.
Verfasst: Mittwoch 9. Dezember 2009, 15:45
von gkuhl
cofi hat geschrieben:gkuhl hat geschrieben:Um das zu umgehen kannst du Listening Comprehension verwenden
Das war was anderes

oh man

Verfasst: Mittwoch 9. Dezember 2009, 16:04
von thomas15
ok, _ guter tip
das ander hat auch funktioniert, danke!