Hallo, ich habe hier zwei Funktionen. Erste Funktion funktioniert nicht so, wie ich es mir vorstelle. Die zweite dagegen schon. Ich möchte eigentlich eine triviale Aufgabe lösen: Eine Datei zeilenweise einlesen, einzelne Zeilen in Wörter aufteilen und das alles in einer zweidimensionalen Liste speichern. Nun wenn ich versuche das oben Beschrieben mit Hilfe der ersten Funktion zu erledigen, dann bekomme ich als Ergebnis eine zweidimensionale Liste, die in der "zweiten Dimension" gleiche Daten enthält. Also den Inhalt der letzen eingelesenen Zeile. Ich verstehe nicht, wieso das passiert. def parse_log_file(logfile): result = [] temp = [] for i in range(5): temp.append( i ) contents = open(logfile, "r").xreadlines() for line in contents: sp = line.split(" ") temp[0] = sp[0] temp[1] = sp[1] temp[2] = sp[2] result.append( temp ) return result # Diese Methode tut das Gewünschte def parse_log_file2(logfile): result = [] temp = [] for i in range(5): temp.append( i ) contents = open(logfile, "r").xreadlines() for line in contents: sp = line.split(" ") host = sp[0] date = sp[1] page = sp[2] result.append( [host, date, page] ) return result _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Alexander, ~ beim initialisieren von temp hast Du eine leere Liste. Wenn Du beispielsweise folgendes Konstrukt verwendest: ~ temp=["","",""] dann läuft es. ~ Oder statt temp[i] temp.append() verwenden. Gruß Gerhard - ---------------- Alex Knaub wrote: | Hallo, | | | ich habe hier zwei Funktionen. Erste Funktion funktioniert nicht so, | wie ich es mir | vorstelle. Die zweite dagegen schon. | Ich möchte eigentlich eine triviale Aufgabe lösen: Eine Datei | zeilenweise einlesen, | einzelne Zeilen in Wörter aufteilen und das alles in einer | zweidimensionalen Liste | speichern. Nun wenn ich versuche das oben Beschrieben mit Hilfe der ersten | Funktion zu erledigen, dann bekomme ich als Ergebnis eine | zweidimensionale Liste, | die in der "zweiten Dimension" gleiche Daten enthält. Also den Inhalt der letzen | eingelesenen Zeile. Ich verstehe nicht, wieso das passiert. | | | def parse_log_file(logfile): | result = [] | temp = [] | | for i in range(5): | temp.append( i ) | | contents = open(logfile, "r").xreadlines() | | for line in contents: | sp = line.split(" ") | temp[0] = sp[0] | temp[1] = sp[1] | temp[2] = sp[2] | result.append( temp ) | return result | | # Diese Methode tut das Gewünschte | def parse_log_file2(logfile): | result = [] | temp = [] | | for i in range(5): | temp.append( i ) | | contents = open(logfile, "r").xreadlines() | | for line in contents: | sp = line.split(" ") | | host = sp[0] | date = sp[1] | page = sp[2] | | result.append( [host, date, page] ) | return result | | _______________________________________________ | python-de maillist - python-de@python.net | http://python.net/mailman/listinfo/python-de | - -- - ------------------------------------------------------ skequell ------ ~ Gerhard Quell Software & Knowledge Engineering ~ Schützenweg 3 eMail: gquell@skequell.de Fon: 0731-26400651 ~ 89275 Elchingen web : http://www.skequell.de Fax: 0731-26400652 - --------------- pgp: 473EC53C - http://www.keyserver.net/en--------- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFBUmILvHbZD0c+xTwRAg/QAJ4mmXVkv9tx9TTkTJf81M06e8xADQCeISyq asy/hGUnirm5cNyiJHJEbT8= =2PUT -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Thu, 23 Sep 2004 07:41:32 +0200, Gerhard Quell <gquell@skequell.de> wrote:
Hallo Alexander,
~ Oder statt temp[i] temp.append() verwenden.
das kann ich nicht machen, denn dann würde ja temp wachsen, ich will aber das temp bei jedem Schleifendruchlauf nur 3 Elemente enthält. Das Problem ist ja, dass ich folgendes Ergebnis bekomme: (angenommen 2 Zeilen wurden eigelesen) result[0][0] = 'Wort1 aus Zeile 1' result[0][1] = 'Wort2 aus Zeile 1' result[0][2] = 'Wort3 aus Zeile 1' result[1][0] = 'Wort1 aus Zeile 1' result[2][1] = 'Wort2 aus Zeile 1' result[3][2] = 'Wort3 aus Zeile 1' die Liste result enthält nur die Daten der letzen eingelesenen Zeile. ich will aber die Daten aller eingelesenen Zeilen darin haben. Das Ergebnis müsste eigentlich so aussehen: result[0][0] = 'Wort1 aus Zeile 0' result[0][1] = 'Wort2 aus Zeile 0' result[0][2] = 'Wort3 aus Zeile 0' result[1][0] = 'Wort1 aus Zeile 1' result[2][1] = 'Wort2 aus Zeile 2' result[3][2] = 'Wort3 aus Zeile 3' _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo! On 23 Sep 2004 at 9:34, Alex Knaub wrote:
die Liste result enthält nur die Daten der letzen eingelesenen Zeile.
Sehr "beliebter" Fehler. Du hast in Deinem Script nur eine einzige temp-Liste und alle Elemente Deiner result-Liste enthalten am Schluss Referenzen auf diese eine einzige temp-Liste. Und die enthält zuletzt eben die Daten der letzten Zeile. Mit result.append( temp[:] ) würdest Du dagegen eine Kopie der temp-Liste mit dem aktuellen Inhalt erzeugen und der result-Liste anhängen. siehe auch: http://www.python.org/doc/faq/programming.html#how-do-i-create-a- multidimensional-list hth Jan _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Thu, 23 Sep 2004 09:56:30 +0200, Jan Voges <jan.voges@gmx.de> wrote:
Sehr "beliebter" Fehler. das habe ich vermutet. Allerdings konnte mir Google dabei nicht helfen.
Du hast in Deinem Script nur eine einzige temp-Liste und alle Elemente Deiner result-Liste enthalten am Schluss Referenzen auf diese eine einzige temp-Liste. Und die enthält zuletzt eben die Daten der letzten Zeile. Mit result.append( temp[:] ) würdest Du dagegen eine Kopie der temp-Liste mit dem aktuellen Inhalt erzeugen und der result-Liste anhängen.
siehe auch: http://www.python.org/doc/faq/programming.html#how-do-i-create-a- multidimensional-list
Genau das ist die Lösung! Vielen Dank. Gruss Alex _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Wednesday 22 September 2004 23:19, Alex Knaub wrote:
ich habe hier zwei Funktionen. Erste Funktion funktioniert nicht so, wie ich es mir vorstelle. Die zweite dagegen schon. Ich möchte eigentlich eine triviale Aufgabe lösen: Eine Datei zeilenweise einlesen, einzelne Zeilen in Wörter aufteilen und das alles in einer zweidimensionalen Liste speichern.
Gibt es einen Grund dafür eine längere Funktion zu schreiben? Wie wäre es mit dieser Zeile: result = [line.split() for line in file("test.py")] Gruß Uli _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Thu, 23 Sep 2004 09:48:28 +0200, Ulrich Kuettler <ulrich.kuettler@gmx.de> wrote:
Gibt es einen Grund dafür eine längere Funktion zu schreiben?
ja ;). Diese Funktion macht noch Einiges mehr. Ich habe nur einen Ausschnitt gepostet, mit dem ich nicht klarkam. _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo, Am Mittwoch, 22. Sep 2004, 23:19:57 +0200 schrieb Alex Knaub:
ich habe hier zwei Funktionen. Erste Funktion funktioniert nicht so, wie ich es mir vorstelle. Die zweite dagegen schon.
Vergleiche die beiden Funktionen: def f(): l = m = [] l += [ 'hi'] print l, m def g(): l, m = [], [] l += [ 'hi'] print l, m Verstanden? Gruß Bertram -- Bertram Scharpf Stuttgart, Deutschland/Germany http://www.bertram-scharpf.de _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Thu, 23 Sep 2004 12:12:11 +0200, Bertram Scharpf <b.scharpf@tesionmail.de> wrote:
Vergleiche die beiden Funktionen:
def f(): l = m = [] l += [ 'hi'] print l, m
def g(): l, m = [], [] l += [ 'hi'] print l, m
Verstanden?
ja, nach dem Hinweis von Jan Voges schon ;) Also, wenn ich eine Liste einer anderen zuweise, dann wird immer eine Referenz zugewiesen. Vielen Dank für eure Hilfe. Viele Grüsse Alex _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (5)
-
Alex Knaub
-
Bertram Scharpf
-
Gerhard Quell
-
Jan Voges
-
Ulrich Kuettler