Seite 1 von 1

Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 16:31
von epicpython
Ich bemühe mich derzeit ein Programm zu schreiben, welches die Werte von Items in einem Spiel vergleicht. Diese Items sind Listen, welche verschiedenste Eigenschaften besitzen. Der Vergleich vollzieht sich jeweils innerhalb der übergeordneten Kategorien. Bedingung für die Zuordnung zu einer Kategorie ist die Vergleichbarkeit mit den enthaltenen Items. Die Frage, die ich mir nun stelle, ist folgende: Wie vergleiche ich Listen so, dass die Ausgabe aufzeigt, welches der verglichenen Items den höchsten Wert je vergleichbarem Objekt besitzt? Hierzu, so denke ich, wäre sicher eine "for"-Schleife notwendig. Doch es scheint mir viel sinnvoller, deshalb frage ich, dass es eine Funktion zum Vergleichen der Werte innerhalb der Listen gibt. Schließlich soll das Programm die Vergleiche selbst vornehmen, ohne dass ich die Berechnungen einzeln definiere. Ich denke dabei etwa an eine Funktion, die zwei Werte des gleichen Stamms miteinander vergleicht und ausgibt, in welchem Verhältnis diese zueinander stehen (==, <, >, etc.).

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 16:36
von epicpython
Bei zwei geordneten Listen sollte es möglich sein, mit zwei "for"-Schleifen die Werte in ihrer Reihenfolge zu vergleichen ohne die Objekte einzeln angeben zu müssen. Doch ich vermisse eine eingebaute "compare()"-Funktion, welche die Werte zweier "for"-Schleifen während ihres Durchlaufs vergleicht.

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 16:55
von __blackjack__
Ich habe so gar nicht verstanden was Du da machen willst. Einzig beim letzten Satz des ersten Beitrags musste ich spontan an die `cmp()`-Funktion in Python 2 denken. Die wurde in Python 3 aber abgeschafft.

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 17:11
von epicpython
Meine Überlegung ist, dass zwei vorab unabhängige "for"-Schleifen je Liste kreiert werden. Diese Schleifen enthalten keine Anweisungen (geht das? Wenn nicht, warum nicht?). Die "for"-Schleifen werden dann schließlich in einer Funktion verglichen. Die Funktion enthält alle möglichen Wertverhältnisse (geprüft mit "if-Statements" und anschließendem "break" gefolgt von der Ausgabe des Verhältnisses (>,<,==,..)).

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 17:18
von __blackjack__
@epicpython: ``for``-Schleifen müssen mindestens eine ``pass``-Anweisung enthalten. Dann sind sie aber ziemlich sinnlos, ausser man braucht wirklich nur den Effekt das ein Iterator ”verbraucht” wird. Schleifen kann man nicht miteinander vergleichen. Das ist ja Code und keine Daten. Mir ist wie gesagt aus der Beschreibung immer noch nicht klar welches Problem da eigentlich gelöst werden soll.

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 17:37
von Sirius3
@epicpython: kannst Du mal ein Beispiel geben, was der Input ist, und wie der Output aussehen soll? Aus dem langen Text werde ich nicht wirklich schlau.

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 17:37
von snafu
Wenn ich es richtig verstanden habe, dann wird sorted() gesucht. Dieses hat einen key-Parameter, dem man die gewünschte Operation für den Vergleich als Funktion mitgeben kann.

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 17:42
von epicpython
Alle Items (Listen) einer Kategorie sollen verglichen werden. Hierzu soll das erste Objekt einer Liste mit dem ersten Objekt einer anderen Liste verglichen werden usw. Der Vergleich soll aufzeigen, ob einer der Werte größer, kleiner oder gleich dem anderen Wert ist.

Beispiel:
Item1 besitzt:
300 Health Points
50 Physical Power

Item2 besitzt:
400 Health Points
50 Physical Power

Nach dem Vergleich soll aufgezeigt werden, dass der erste Wert des zweiten Items höher ist als der des ersten Items, sich die physische Kraft jedoch nicht unterscheidet. Das zweite Item wird anschließend als besser klassifiziert und das erste Item scheidet aus. Der Vergleich geht nun weiter mit dem zweiten und dritten Item.

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 17:48
von snafu
Wie gesagt, klingt für mich nach sorted(). Mehrere Eigenschaften lassen sich als Tupel ausdrücken. Wobei man da natürlich schauen muss, ob die Vergleichslogik für Tupel so gewünscht ist.

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 18:01
von Sirius3
@epicpython: Du hast also Items mit Eigenschaften. Da ist eine Liste der falsche Datentyp. Ein Wörterbuch wäre besser geeignet. Wenn die Eigenschaften vorher definiert sind, ist ein Named-Tuple wohl am besten. Oder gleich eine eigene Klasse.

Dann willst Du eine Funktion schreiben, die zwei Items vergleicht, da ist mir noch unklar, was passieren soll, wenn eine Eigenschaft größer, die andere aber kleiner ist.

Was dann nach dem Vergleich passiert, ist mir noch unklar. Was soll „ausscheiden” bedeuten?

Re: Vergleichen von Listen

Verfasst: Donnerstag 4. Oktober 2018, 19:07
von kbr
@epicpython: Deine Items haben Eigenschaften, lassen sich also besser als Objekte abbilden, denn als Listen. Auf Klassen kannst Du Methoden wie __gt__ anlegen, welche das Sortierverhalten definieren. Dann reicht ein einfaches sortieren einer Liste, um zum gewünschten Ergebnis zu kommen.