Seite 1 von 1

Listen "primitiv" vergleichen

Verfasst: Sonntag 28. März 2004, 10:52
von loewe
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.

Verfasst: Sonntag 28. März 2004, 11:12
von Milan
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