frage zu list bzw. class

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
wolsue
User
Beiträge: 6
Registriert: Samstag 31. März 2018, 21:20

class wegedaten(object):
def __init__(self):
self.elemente =[]
self..liste = [[]]
self.anzahl = 0
self.zeile = 0

def eintrag(self,object):
self.elemente.append(object)
self.anzahl = self.anzahl + 1
if self.anzahl == 3:
self.liste[self.zeile].append(self.elemente)
self.anzahl = 0
self.elemente = []

def ausgabe(self):
print(self.liste)

w = wegedaten()
w.eintrag(12)
w.eintrag(13)
w.eintrag(14)
w.eintrag (15)
w.eintrag(16)
w.eintrag(17)
w.ausgabe()

ist die Ausgabe : [[[12,13,14],[15,16,17]]]
warum sind hier [[[ .... ]]]
was ich möchte ist
[[12,13,14],[15,16,17]]
erster eintrag ist [12,13,14]
zweiter eintrag [15,16,17]
und dies in einer Liste

kann mir jemand eine Hilfe geben/was mach ich falsch ??? Danke
Benutzeravatar
__blackjack__
User
Beiträge: 14033
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@wolsue: Also ich bekomme da erst einmal einen Syntaxfehler. Und wenn ich den behebe, an anderer Stelle gleich noch einen. Und danach noch ein paar. Es wäre nett wenn Du Code postest der auch lauffähig ist.

Die verschachtelten Listen bekommst Du weil Du sagst das Du derartig verschachtelte Listen haben willst. Nicht im Beitragstext, aber halt im Code. Du hast eine leere Liste in einer leeren Liste und hängst an die innere Liste dann im Laufe des Programms Listen an. Dann bekommst Du genau das was Du siehst.

Code: Alles auswählen

In [5]: xs = [[]]

In [6]: ys = [1, 2, 3]

In [7]: xs[0].append(ys)

In [8]: xs
Out[8]: [[[1, 2, 3]]]

In [9]: xs[0].append(ys)

In [10]: xs
Out[10]: [[[1, 2, 3], [1, 2, 3]]]
Wenn Du das anders möchtest, musst Du das halt im Code anders machen. Und zum Beispiel nicht mit ``[[]]`` anfangen sondern nur mit ``[]`` und die Listen dort direkt anhängen. Die Attribute `zeile` und `anzahl` sind auch redundant. Du hängst ja immer hinten an, dazu braucht man sich die ”Zeile” nicht zu merken, denn `append()` hängt ja automatisch hinten an. Und `anzahl` ist immer die Länge von `elemente`. Man kann die Länge von Listen abfragen, die muss man sich nicht redundant irgendwo merken.

Klassennamen schreibt man in Python MixedCase, also `Wegedaten` statt `wegedaten`. `wegedaten` wäre dann ein besserer Name für ein Exemplar dieser Klasse, anstelle von `w`.

Funktions- und Methodennamen beschreiben üblicherweise Tätigkeiten. Also `ausgeben()` statt `ausgabe()`.

Code: Alles auswählen

#!/usr/bin/env python3

class Wegedaten(object):

    def __init__(self):
        self.elemente = list()
        self.liste = list()
  
    def eintrag(self, value):
        self.elemente.append(value)
        if len(self.elemente) == 3:
            self.liste.append(self.elemente)
            self.elemente = []

    def ausgeben(self):
        print(self.liste)


def main():
    wegedaten = Wegedaten()
    for value in [12, 13, 14, 15, 16, 17]:
        wegedaten.eintrag(value)
    wegedaten.ausgeben()


if __name__ == '__main__':
    main()
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Sirius3
User
Beiträge: 18267
Registriert: Sonntag 21. Oktober 2012, 17:20

Oder einfacher, ohne den Overhead einer eigenen Klasse:

Code: Alles auswählen

eintraege = [12, 13, 14, 15, 16, 17]
wegedaten = list(zip(*[iter(eintraege)] * 3)
print(wegedaten)
wolsue
User
Beiträge: 6
Registriert: Samstag 31. März 2018, 21:20

Danke für Deine Antwort, einiges werde ich mir zu Herzen nehmen.
Antworten