Objekt in Liste speichern und lesbar ausgeben

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.
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Ich möchte im Prinzip die einzelnen Datensätze erstmal auslesen, um dann mit Ihnen zu arbeiten (Werte zusammenzählen/ändern usw.)
Normalerweise geht das doch so: print (Treffer[0][1]). Da greift er auf das zweite Element des ersten Datensatzes zu.
Aber wenn das ganze als Objekt in der Liste gespeichert ist, funktioniert das nicht. Ich kann zwar die Objekte anwählen, aber nicht die einzelnen Eigenschaften (in meinem obigen Beispiel also die [1].
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

liste[index].eigenschaft

Aber wie Sirius3 schon sagte - Indexzugriff klingt erstmal falsch. Iterieren über die Liste ist der bessere Ansatz.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Cortez: Was ist denn ”das zweite Element des ersten Datensatzes”? Wenn die Datensätze zum Beispiel `Person`-Exemplare sind, dann gibt es da ja kein „zweites Element“ weil das ja keine Sequenz ist sondern ein Objekt mit Attributen. Genau deswegen macht man das ja, damit man nicht so was unverständliches wie ``treffer[0][1]`` im Programm stehen hat, wo man wissen muss was diese magische 1 wohl bedeuten mag, sondern ``treffer[0].vorname`` wo man sofort beim lesen weiss der Wert für eine Bedeutung hat.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Ah - sowas wie das treffer[0].vorname habe ich gesucht. Aber ich hab das testweise mal ausgeben lassen - bringt bei mir keine Ausgabe...

Edit: Kommando zurück - habe meinen Fehler gefunden.

Kann man auf die Indizes eigentlich auch variabel zugreifen. Also wenn der Benutzer aus mehreren Treffern z.B. einen auswählen möchte. Mit normalen Variablen gehts ja glaub ich nicht, weil der Index immer ein integer sein muss...
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Natürlich geht das Variabel. Hast du das mal probiert?
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Ja mit ner for Schleife hab ichs mal hingekriegt. Aber außerhalb noch nicht...
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

So wie ich das oben hingeschrieben habe, kann man das auch benutzen. Wenn du Index mit einem anderen wert belegst, bekommst du ein anderes Objekt.

Ich lege dir wirklich dringend ein Grundlagentutorial nahe. Nur durch raten kommst du nicht weiter.
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Ja, stimmt schon. Ich habe mir auch schon einige Tutorials angesehen. Dass ich noch viel zu lernen habe, ist mir selbst bewusst.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Tutorials nicht nur ansehen, sondern durcharbeiten, also live ausprobieren was da steht und ausprobieren ob man verstanden hat was da steht.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ cortez:
eine kleine Übersetzungshilfe für FireFox ab Vers. 57. Bin zwar kein großer Freund von solchen Dingen, aber wenn's dir hilft ...
https://addons.mozilla.org/de/firefox/a ... ranslator/

und für die Suche immer
https://duckduckgo.com/ verwenden ...
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ist ein bisschen inkonsequent DDG für die Suche zu verwenden und dann für die Übersetzungen doch wieder Google Daten hinterher zu werfen. ;-)

Hätte da ja eher etwas auf DeepL basierendes für die Übersetzungen erwartet.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ _blackjack_ :
ja, war Schnellschuß, aber wenigstens ist eins safe ;-)
ich benutze es ja nicht, und hatte keine große Lust, zu suchen, sondern ich wollte eher darauf aufmerksam machen, dass es Addons zum Übersetzen gibt ...
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Danke nochmal an alle, die mir geholfen haben. Besonders an eure Geduld - meine Anfängerprobleme sind sicherlich eher nervig für euch.
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

Anfängerprobleme sind normal. Bin ja selbst einer. So (beim Lesen der Threads) kann ich selbst überprüfen, ob ich das Gelernte auch begriffen habe, indem ich versuche, Hilfestellung zu leisten. Sollte diese Hilfe falsch sein, meldet sich sowieso _blackjack_ oder _deets_ und ich kann wieder mehr lernen.
Es ist toll, dass heutzutage noch Menschen auf der Welt sind, die uneigennützig ihre Hilfe anbieten. Danke dafür auch an dieser Stelle nochmals von mir !
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Cortez hat geschrieben: Samstag 16. Februar 2019, 20:51 Ein letztes Problem hätte ich noch: Wie kann ich auf die einzelnen Elemente eines in einer Liste gespeicherten Objektes zugreifen, wenn Indexing nicht unterstützt wird?
Oder muss man das irgendwie anders lösen?
Entweder direkt auf die liste zugreifen:

Code: Alles auswählen

class Klasse:
    def __init__(self, children):
        self.children = children
        
root =Klasse(['Hello', 'World'])
print(root.children)
print(root.children[0])
Es ginge auch so:

Code: Alles auswählen

class Klasse:
    def __init__(self, children):
        self.children = children
    def __getitem__(self, index):
        return self.children[index]
    def __len__(self):
        return len(self.children)
        
root =Klasse(['Hello', 'World'])
print(list(root))
print(root[0])
Die Methode __len__ liefert die Anzahl der Elemente zurück.
Die Methode __getitem__ wird aufgerufen, wenn man auf den index/key mit den eckigen Klammern zugreift.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@DeaD_EyE: der OP hat keine Liste in einer Klasse, sondern eine Liste mit Elementen.
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ Cortez :
ich würd's auch auspacken (unpacking) :
hier mal ein Beispiel:

Code: Alles auswählen

>>> personen = [("Stefan", 29), ("Uta", 45), ("Rainer", 68)]
>>> for name, alter in personen :
           print(name, alter)

Stefan 29
Uta 45
Rainer 68
>>>
Du kannst ja nach for ... mit Bedingungen arbeiten, und, und, und. Ich würde Tupel in der Liste benutzen, aber Liste in Liste ginge notfalls auch:

Code: Alles auswählen

>>> personen = [["Stefan", 29], ["Uta", 45], ["Rainer", 68]]
>>> for name, alter in personen :
           print(name, alter)

Stefan 29
Uta 45
Rainer 68
>>>
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Perlchamp: Aber es gibt doch bereits eine `Person`-Klasse und eine Liste mit Objekten von diesem Typ. Warum jetzt wieder Tupel? Das kann man bei zwei Werten vielleicht noch machen, aber es gibt ja mindestens vier laut OP und da fangen Tupel dann langsam an unhandlich und kryptisch zu werden, und sind auch schwerer zu ändern, weil man wenn man dann doch noch etwas hinzufügen oder entfernen möchte, immer den ganzen Code durchgehen und alle Stellen anpassen muss wo mit den Tupeln gearbeitet wird. Oder man hat wieder magische Indexwerte im Code.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ _blackjack_ :
cortez schrieb:
ich habe ein Programm, in dem Werte aus einer Textdatei gelesen werden [...] Ein letztes Problem hätte ich noch: Wie kann ich auf die einzelnen Elemente eines in einer Liste gespeicherten Objektes zugreifen, wenn Indexing nicht unterstützt wird?
=> hatte vergessen, dass er eine Klasse benutzt
und schlußendlich habe ich überlesen:
Ich möchte im Prinzip die einzelnen Datensätze erstmal auslesen, um dann mit Ihnen zu arbeiten (Werte zusammenzählen/ändern usw.)
=> da Tupel unveränderbar sind ist das hier natürlich nicht angebracht.

tja, wer lesen kann ist klar im Vorteil, ich Thor !
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Perlchamp: es ging __blackjack__ nicht um das Verändern des Inhalts der Tuple, sondern, dass man das Programm verändern muß, also einen weiteren Wert hinzufügen, was dann bedeutet, an allen Stellen, in denen Unpacking verwendet wird, den neuen Wert auch hinzuzufügen.
Antworten