Seite 1 von 1
frage zu list bzw. class
Verfasst: Sonntag 2. September 2018, 12:25
von wolsue
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
Re: frage zu list bzw. class
Verfasst: Sonntag 2. September 2018, 12:46
von __blackjack__
@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()
Re: frage zu list bzw. class
Verfasst: Sonntag 2. September 2018, 14:05
von Sirius3
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)
Re: frage zu list bzw. class
Verfasst: Sonntag 2. September 2018, 16:33
von wolsue
Danke für Deine Antwort, einiges werde ich mir zu Herzen nehmen.