Einen Bestimmten Wert suchen in einer Liste

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
Klinke2000
User
Beiträge: 5
Registriert: Montag 16. September 2019, 21:00

Hey,
ich bräuchte mal Hilfe. Entweder ich bin einfach zu doof dafür oder es ist schwierig.
Ich habe eine Liste wo mehrere Listen sind die, wo nur eine Art reinkommt.

Code: Alles auswählen

Kontakt=[[Vorname1,Vorname2],[Nachname1,Nachname2],[Alter1,Alter2]]
Nun möchte ich versuchen wenn ich einen vorhandenen Namen suche, das er die anderen Daten dazu ausgibt.
Bsp Vorname1,Nachname1,Alter1

Ich hab schon was versucht aber da gibt er die ganze Liste dann an.

Code: Alles auswählen

Name=[[],[],[]]
menu=True
while menu:
    x=input("Name :")
    y=input("Vorname :")
    z=input("Wohnort :")
    Name[0].append(x)
    Name[1].append(y)
    Name[2].append(z)
    print(Name)
    s=input("NachName :")
    for i in range(len(Name[0])):
        if s in Name[0]:
            print(Name[0][i])
            print(Name[1][i])
            print(Name[2][i])
        else:
            print("Nicht in Liste")
Das ist jetzt nur so geschrieben damit ich sehe was in der ganzen Liste drin ist. Das sollte natürlich noch besser sein, will aber erstmal gucken ob das so funktioniert.

Danke schonmal im Voraus
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Datenstruktur ist unguenstig. Das macht man so nicht. Man nimmt Objekte (Tupel, NamedTupel, Datenklassen), und die steckt man in eine Liste. Damit sind dann alle Daten beeinander, wenn man einen Eintrag gesucht und gefunden hat.

Code: Alles auswählen

from dataclasses import dataclass


@dataclass
class Person:
    vorname: str
    name: str
    alter: int


def main():
    heuhaufen = [
        Person("Peter", "Pasulke", 44),
        Person("Klaus", "Knoedel", 23),
        Person("Nina", "Nordpol", 32),
    ]
    nadel = "Nina"
    try:
        ergebnis = [p for p in heuhaufen if nadel == p.vorname][0]
        print(ergebnis)
    except IndexError:
        print("Kein Ergebnis")


if __name__ == '__main__':
    main()
Klinke2000
User
Beiträge: 5
Registriert: Montag 16. September 2019, 21:00

Es sollen ja immer neue Namen hinzugefügt werden und wenn dann wieder gelöscht werdern. Kann man auch damit die Nachname und vornamen in eine listbox von Tkinter schreiben.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja und? Du kannst genauso Personen entfernen. Warum glaubst du deine Struktur wäre da besser? Und natürlich kannst du die Daten auch darstellen.
Klinke2000
User
Beiträge: 5
Registriert: Montag 16. September 2019, 21:00

Hab bis jetzt alles von deinem Code verstanden außer, aus ergebnis =, und warum unten if name == main.
Ich habe halt probiert das was ich eintippe, jetzt bei mir im Beispiel tkinter mit entry get das dort einzufügen dies hat aber nicht funktioniert.
Dort stand argument not givens. Kann sein das es etwas spät ist oder ich zu doof.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das mit dem __main__ ist der übliche boiler plate um ein Skript ausführbar und importierbar zu machen. Das ist nicht so wichtig. Anders als die Ergebnis-Zeile. Das ist eine list comprehension mit Bedingung. Kann man in der Python Dokumentation nachlesen.

Und was du probiert hast kann hier keiner sehen. Nur zu beschreiben das irgendwas irgendwie nicht funktioniert hat - tjoa. Kann man nix zu sagen. Da musst du schon konkreten Code und konkrete Fehlermeldungen zeigen.
Klinke2000
User
Beiträge: 5
Registriert: Montag 16. September 2019, 21:00

Code: Alles auswählen

from dataclasses import dataclass
class Person:
    nachname: str
    vorname: str
    alter: str
    
    Kontakte=[]
    
    def Mitgliedhinzu():
    	x=Person(Entry.Nachname.get(),Entry.Vorname.get(),Entry.Alter.get())
    	Kontakte.append(x)
So wäre das meine Idee gewesen, kann sein das ich falsch liege.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist doch komplett geraten. Wieso sollte Kontakte ein Klassenattribut von Person sein? Und warum die Funktion als Methode? Und die Entries gehen so natürlich auch nicht. Wenn du einen Fehler bekommen hast, dann fehlt da aber auch Code drumrum. Wo ist der?
Klinke2000
User
Beiträge: 5
Registriert: Montag 16. September 2019, 21:00

Naja bei dir im Code ist ja die Person schon in der Liste, da dachte ich man kann die so hinzufügen.

Code: Alles auswählen

from tkinter import *
from dataclasses import dataclass

tk=Tk()
tk.geometry("500x500")

class Person:
    nachname: str
    vorname: str
    alter: int
    
Kontakte=[]

def Mitgliedhinzu():
    x=Person(Entry.Nachname.get(),Entry.Vorname.get(),Entry.Alter.get())
    Kontakte.append(x)
    
Label.Vorname=Label(tk,text="Vorname :")
Label.Nachname=Label(tk,text="Nachname :")
Label.Alter=Label(tk,text="Alter :")

Label.Vorname.place(x=20,width=100,y=70,height=10)
Label.Nachname.place(x=20,width=100,y=120,height=10)
Label.Alter.place(x=20,width=100,y=170,height=10)

Button.Mitgliedhinzu=Button(tk,text="Mitglied hinzufügen",command=Mitgliedhinzu)
Button.Mitgliedhinzu.place(x=10,width=150,y=450,height=40)

Entry.Vorname=Entry(tk)
Entry.Nachname=Entry(tk)
Entry.Alter=Entry(tk)

Entry.Vorname.place(x=130,width=360,y=68,height=20)
Entry.Nachname.place(x=130,width=360,y=118,height=20)
Entry.Alter.place(x=130,width=360,y=168,height=20)

tk.mainloop()
Hier wäre der Code.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Und schon wieder: was funktioniert an dem neuen Code nicht?

Das ist eine interessante Art zu programmieren, alles als Attribute an die Klassen zu binden. Bist Du selbst auf die Idee gekommen? Schau Dir andere Beiträge um Tk-Unterforum an. In jedem zweiten wird der grundlegende Aufbau einer GUI gezeigt. Halte Dich an die dort geschriebenen Empfehlungen.
Antworten