Wie kann man dies effizient umsetzt? Thema Listen

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
gabba110
User
Beiträge: 16
Registriert: Donnerstag 28. September 2017, 20:13

Hi, will für ein Schulprojekt ein Programm schreiben. Nun stoße ich aber au ein kleines Problem und zwar möchte ich eine Funktion integrieren die es mir erlaubt eine Liste zum Beispiel,

Code: Alles auswählen

 
liste=  [(2 , 2), (1 ,1 ), (2 ,4 ), (2 ,6) , (1 , 2) , (3 ,2 )])
auf gleiche Paare zu untersuchen also (1,1) etc. . Also ich möchte herausfinden ob die Liste nur aus gleichen paaren besteht oder nicht.
mein Ansatz wäre:

Code: Alles auswählen

def prüfe (k,liste):
    for i in range(0,len(liste)):
        if liste[i][0] == liste[i][-1]: 
            print xxx    
        else:
            print xxx
Des Weiteren soll überprüft werden ob alle Zahlen k von 0-5 vorkommen.
Wüsste aber nicht, wie ich es einbringen würde.

Bedanke mich im Voraus für nützliche Tipps:)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dein Ansatz dazu, ob ein Element der Liste aus zwei gleichen Zahlen besteht, oder aus unterschiedlichen, ist an sich schon ganz ok. Nur das du statt print bei *ungleichheit* gleich ein "return False" durchfuehren kannst, und ansonsten ein "return True".

Und fuer das andere Problem - schau dir mal die Datenstruktur "set". Die garantiert, das jedes Element nur einmal vorkommt. Da kannst du also alle Werte reinwerfen, und es zB danach mit dem set([1, 2, 3, 4, 5]) vergleichen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@gabba110: in Deiner Funktion `prüfe` wird `k` gar nicht benutzt. Für was ist das gedacht?

`for .. in range(len(..)):` ist ein sogenanntes AntiPattern, das heißt, macht man nicht, weil es umständlich und schwer lesbar ist. Man iteriert direkt über die Elemente der Liste:

Code: Alles auswählen

def prüfe(k, liste):
    for a, b in liste:
        if a == b: 
            print xxx    
        else:
            print xxx
gabba110
User
Beiträge: 16
Registriert: Donnerstag 28. September 2017, 20:13

Dane für den Tipp mit "set", daran habe ich garnicht gedacht, also wäre das zweite Problem gelöst.

Aber das Problem 1. besteht noch.
Vlt habe ich es etwas falsch erklärt:)
Ich möchte überprüfen ob jedes Element, also im Falle der Liste:

Code: Alles auswählen

liste =  [(2 , 2), (1 ,1 ), (2 ,3 ), (3 ,3 )])
(1,2,3) wenn es denn vorkommt auch ein Paar mit sich selbst bildet, es darf allerdings auch paare mit anderen Elementen bilden, solange es mit sich selbst eins bildet. Da Problem ist bei meinem Code, dass es ein Falsch ausspuckt, weil eben (2 ,3 ) nicht die Bedingung erfüllt.
Frage wäre nun: Wie bringe ich Python dazu, dass es überprüft ob die einzelnen Elemente der Liste jeweils ein paar mit sich selbst bilden, ohne das es ein Falsch bei ungleichen paaren ausgibt, wie dies einzelnen Elemente des ungleichen Paares selbst schon ein Paar mit sch selbst bilden.

Ok also ich hoffe ich habe es etwas besser rüber gebracht :D
gabba110
User
Beiträge: 16
Registriert: Donnerstag 28. September 2017, 20:13

Sirius3 hat geschrieben:@gabba110: in Deiner Funktion `prüfe` wird `k` gar nicht benutzt. Für was ist das gedacht?

`for .. in range(len(..)):` ist ein sogenanntes AntiPattern, das heißt, macht man nicht, weil es umständlich und schwer lesbar ist. Man iteriert direkt über die Elemente der Liste:

Code: Alles auswählen

def prüfe(k, liste):
    for a, b in liste:
        if a == b: 
            print xxx    
        else:
            print xxx
Hi, dass k sollte den einzelnen Elementen gelten, also (1,2,3,4,5...x), nur wusste ich vorher noch nicht wie ich mein zweites Problem löse, aber dank dem von mir verdrängten "set" Befehl, ist Problem 2 gelst und somit besteht auch eine Funktion für k:)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@gabba110: genau das ist schon der erste Schritt zur Lösung: das Problem so zu beschreiben, dass es jemand anderes auch versteht und später der Computer.

1. gegeben ist eine Liste mit Zahlenpaaren
2. für jede Zahl muß gelten, es gibt mindestens ein paar mit sich selbst.

Das kann man in zwei Teile teilen:
1. alle Zahlen ermitteln
2. alle Zahlen in Gleichheitspaare ermitteln.

Testen ob beide Mengen übereinstimmen.
gabba110
User
Beiträge: 16
Registriert: Donnerstag 28. September 2017, 20:13

Ok ich habe es:)
Antworten