Listen 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.
Antworten
toper
User
Beiträge: 74
Registriert: Freitag 13. April 2018, 14:37

Hallo zusammen,
ich möchte gerne 2 Listen so verleichen, dass ich nacher weiß welche einträge in welcher List einmalig sind.
Also zum beispiel:

Code: Alles auswählen

x = [1,2,3,4,5]
y = [3,4,5,6,7]
Dann möchte ich als output:
1,2 nur in liste x
3,4,5 in liste x und y
6,7 nur in Liste y

Gibt es da einen einfachen Befehl?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Dafür benutzt man `set`s und deren Methoden.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Mit Sets oder List Comprehensions, wobei die Set Methoden am schnellsten sind.

Beispiele:

Code: Alles auswählen

liste1 = [1,2,3,4,5]
liste2 = [3,4,5,6,7]

#mit List Comprehensions
nur_in_liste1 = [x for x in liste1 if x not in liste2]
gemeinsam = [x for x in liste1 if x in liste2]
nur_in_liste2 = [x for x in liste2 if x not in liste1]

print(nur_in_liste1)
print(gemeinsam)
print(nur_in_liste2)


#mit Sets und deren Methoden
nur_in_liste1 = set(liste1).difference(liste2)
gemeinsam = set(liste1).intersection(liste2)
nur_in_liste2 = set(liste2).difference(liste1)


print(nur_in_liste1)
print(gemeinsam)
print(nur_in_liste2)

#oder so:
nur_in_liste1 = set(liste1) - set(liste2)
gemeinsam = set(liste1) & set(liste2)
nur_in_liste2 = set(liste2)- set(liste1)

print(nur_in_liste1)
print(gemeinsam)
print(nur_in_liste2)
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

und man kann das noch beschleunigen, indem man die Umwandlung der Listen nur einmal macht und nicht 3 mal. :-)

Code: Alles auswählen

set1 = set(liste1)
set2 = set(liste2)
nur_in_liste1 = set1 - set2
gemeinsam = set1 & set2
nur_in_liste2 = set2 - set1
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
toper
User
Beiträge: 74
Registriert: Freitag 13. April 2018, 14:37

Vielen Dank,
ich werde das mal versuchen.
Antworten