Listen "primitiv" vergleichen

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.
loewe
User
Beiträge: 4
Registriert: Sonntag 16. Februar 2003, 20:50

Listen "primitiv" vergleichen

Beitragvon loewe » Sonntag 28. März 2004, 10:52

Hallo,
ich habe folgendes Problem, und bin nach langem Probieren und Suchen noch zu keiner Lösung gekommen:

Ich möchte zwei Listen miteinander vergleichen. Ich habe viele Möglichkeiten gefunden, jedes Element der 1ten Listen mit dem Element desselben Index der zweiten Liste zu vergleichen, und dann jede Abweichung auszugeben.

Ich bräuchte aber eine Möglichkeit, einfach nur eine Abweichung der Listen, unabhängig vom Index zu erkennen.
Vielleicht einfach ein Beispiel:
Liste1 = ["a","b","c","d","a"]
Liste2 = ["a","c","a","d"]

Jetzt müsste irgendwie erkannt werden, das in Liste 2 ein b fehlt.
Umgekehrt müsste es auch klappen, also wenn ein Element dazu kommt...

Ich hoffe ich hab es halbwegs geschafft, mein Problem zu verdeutlichen.
Für Hilfe wäre ich sehr dankbar.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Sonntag 28. März 2004, 11:12

Hi. Du willst also nur feststellen, was in der einen Liste mehr als in der 2. ist, unabhängig davon an welcher Stelle das ist? Das dürfte an sich kein Problem sein. Schwieriger wird es, wenn du wissen willst an welcher Stelle das auch noch fehlt.

Für das erste reicht es, wenn du einfach jedes Element durchzählst:

Code: Alles auswählen

def vergleiche(l1,l2=[]):
   mehr=[i for i in l1 if l1.count(i)>l2.count(i)]
   weniger=[i for i in l2 if l1.count(i)<l2.count(i)]
   return [item for i,item in enumerate(mehr) if item not in mehr[:i]],[item for i,item in enumerate(weniger) if item not in weniger[:i]]

Die Beispielfunktion hier gibt dir dann zwei Ergebnisse: was in der 1. mehr als in der zweite ist (b) und was in der ersten weniger oft da ist als in der zweiten (hier nix) bzw was gar nicht in der ersten ist, aber in der zweiten. Die list comprehenshions beim return sind notwendig, um doppelte einträge aus beiden Listen zu entfehrnen. Die würden bei mir z.B. dann auftreten, wenn das "a" in der ersten Liste 4 mal vorhanden wäre.

Wenn du das ganze mit Indexen willst, weiß ich aber aus dem Stehgreif keinen so einfachen Ansatz wie das abzählen mit count...

Milan

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder