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.
what's wong with that syntax?
Magst Du vielleicht Code-Tags benutzen?
Zur Frage:
Und warum machst du ';' hinter Zeilen?
HTH
Christian
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
HTH
Christian
Ich will die inneren listen unterschiedlich wachsen lassen.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
So dass z.B.
Code: Alles auswählen
In [1]: len(a[1])
Out[2]: 10
In [3]: len(a[2])
Out[4]: 14
- Alte C,Java und vor allem Matlab Angewohnheit.Und warum machst du ';' hinter Zeilen?
HTH
Christian
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
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:
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 ;-)
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']
Was du willst ist
Code: Alles auswählen
a = [[] for _ in xrange(10]
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
Code: Alles auswählen
[[] for i in xrange(10)]
Gerrit
Edit: Zu langsam
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 verarbeitenCM, 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:
In dem Fall zu aufwendig, will schnelles Ergebniss und kein Deluxe Softwareengineering Produkt.Und bevor du mit verschachtelten Listen anfängst rumzumurksen, bau dir lieber gleich Klassen
Trotzdem, viellen dank fuer
Code: Alles auswählen
[[] for _ in xrange(10)]
Danke euch beiden fuer die Hilfe!
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das war was anderesgkuhl hat geschrieben:Um das zu umgehen kannst du Listening Comprehension verwenden
Der `_` wird haeufig als Platzhalter fuer uninteressante Namen benutzt. Im interaktiven Interpreter steht er aber fuer den letzten Rueckgabewert.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte