Seite 1 von 1
Zwei Listen miteinander vergleichen
Verfasst: Montag 23. Januar 2017, 20:31
von wido
Hallo,
wie kann ich zwei Listen miteinander vergleichen, um herauszufinden, ob Elemente von Liste A in Elementen von Liste B enthalten sind? Habe gedacht, dass ich es mit folgender Anweisung herauskriegen könnte.
Code: Alles auswählen
lines = open("textA.txt")
my_list = open("textB.txt")
for word in lines:
for x in my_list:
if word in x:
print(word)
print("Treffer")
Leider funktioniert es so nicht.
Re: Zwei Listen miteinander vergleichen
Verfasst: Montag 23. Januar 2017, 20:52
von nezzcarth
Die innere Schleife benötigst du nicht. Aktuell iterierst du für jedes Element der ersten Liste über alle Elemente der zweiten Liste und vergleichst dann, ob das erste Element im zweiten enthalten ist, statt zu schauen, ob es in der Liste ist.
Re: Zwei Listen miteinander vergleichen
Verfasst: Montag 23. Januar 2017, 21:03
von wido
Wenn ich das nur über die erste Schleife laufen lasse, kommt allerdings kein Treffer, obwohl Elemente von Liste A auch in Liste B existieren.
Code: Alles auswählen
lines = open("textA.txt")
my_list = open("textB.txt")
for word in lines:
if word in my_list:
print(word)
print("Treffer")
Hier noch eine Erklärung zur besseren Veranschaulichung:
Zum Beispiel möchte ich in Erfahrung bringen, ob das Element[4] der Liste A, das den Stringwert „Berlin“ hat, in Elementen der Liste B als Teilstring vorkommt. Zum Beispiel könnte im Element[5] der Liste B der String „Berlin ist ein Stadtstaat“ stecken. In diesem Fall möchte ich, dass etwas ausgedruckt, z. B. Berlin und Treffer.
Re: Zwei Listen miteinander vergleichen
Verfasst: Dienstag 24. Januar 2017, 07:36
von Sirius3
@wido: Dein Problem ist, dass das Zeile-Ende-Zeichen noch an word hängt und so nur Wörter gefunden werden können, die am Ende der Zeilen aus textB liegen. Zum Anderen sind alle Zeilen aus textB nach dem ersten Durchlauf „verbraucht”, Du mußt also diese Zeilen in einer Liste speichern um sie immer wieder durchlaufen zu können. Drittens schließt Du die Dateien nicht wieder.
Re: Zwei Listen miteinander vergleichen
Verfasst: Dienstag 24. Januar 2017, 13:25
von wido
Sirius3 hat geschrieben:@wido: Dein Problem ist, dass das Zeile-Ende-Zeichen noch an word hängt und so nur Wörter gefunden werden können, die am Ende der Zeilen aus textB liegen.
Ist das gelöst, wenn ich die Zeilen aus textB als Listenelemente speichere?
Sirius3 hat geschrieben:Zum Anderen sind alle Zeilen aus textB nach dem ersten Durchlauf „verbraucht”, Du mußt also diese Zeilen in einer Liste speichern um sie immer wieder durchlaufen zu können. Drittens schließt Du die Dateien nicht wieder.
Ok, die Zeilen liegen jetzt nun in einer Liste vor. Heißt das, dass ich das doch mit zwei for-Schleifen durchlaufen muss? Also so in etwa:
Code: Alles auswählen
lines = open("textA.txt")
for word in lines:
for x in my_list: #mylist ist nun eine Liste
if word in my_list:
print(word)
lines.close()
Re: Zwei Listen miteinander vergleichen
Verfasst: Dienstag 24. Januar 2017, 13:32
von BlackJack
@wido: Nein, die Zeilenendezeichen verschwinden nicht auf magische Weise wenn man Zeichenketten in Listen steckt. Die muss man mit der entsprechenden Methode selbst explizit entfernen bevor man sie in die Liste steckt. Oder während, wenn sich eine „list comprehension“ anbietet.
Wo wird denn `x` verwendet?
Re: Zwei Listen miteinander vergleichen
Verfasst: Dienstag 24. Januar 2017, 14:28
von wido
@BlackJack Das x wird in jedem Element von my_list verwendet. Ich möchte also, dass an jeder Indexstelle von my_list überprüft wird, ob ein Indexelment von lines vorkommt. Es soll ganz konkret überprüft werden, ob das jeweilige Element von lines als Teilstring in einem Element von my_list steckt. In beiden Listen sind nur Strings vorhanden.
Re: Zwei Listen miteinander vergleichen
Verfasst: Dienstag 24. Januar 2017, 15:08
von BlackJack
@wido: Okay, dann anders herum: Das `x` in Deinem Code wird gar nicht verwendet. Das wird an jedes Element aus `my_list` gebunden und dann wird innerhalb der Schleife nichts damit gemacht. Das macht keinen Sinn.