Frage von nilsiscool, 45

Python Liste nach Inhalt untersuchen?

Guten Tag,

eine weiter Frage zu Python von mir. :-D

Ich habe zwei listen, welche ungefähr so aussehen:

Liste 1: [Golf7, Golf 6, Polo 9n3, Mercedes C63, BMW 535i]

Liste 2 ist so gesagt ein Nachschlagewerk (Beinhaltet also mehr Listenelemente als Liste 1 & andere Reihenfolge

Liste2:

[Mercedes C63 Kategorie 10, BMW535i Kategorie 4, Golf7 Kategorie 1]

Nun möchte ich einen algorithmus schreiben, welcher die beiden listen vergleicht und zu dem Fahrzeug die dazugehörige Kategorie ausliest, also wenn Listenelement 1 (Bsp. Golf7) aus Liste 1 ist vorhanden in Liste 2, gib mir Listenelement aus Liste 2 aus, wo Listenelement1 drin steht, also Baureihe inklusive Kategorie.

Danke für eure Unterstützung

Antwort
von offeltoffel, 27

Hi nilsiscool,

vorneweg: ich bin kein Profi und meine Methoden sind nicht immer wasserdicht. Ein Python-Crack darf und soll mich gerne korrigieren.

Zunächst einmal muss ich den Aufbau der Listen bei dir in Frage stellen. Wir reden hier ja von Strings, also Textbausteinen und...naja, da ist Ärger vorprogrammiert. Wenn man überprüft, ob Strings identisch sind, gibt es oft Probleme (z.B. Groß- und Kleinschreibung, Zeichencodierung, End-of-Line-Charaktere etc).

Wenn ich dich richtig verstehe, möchtest du für jedes Listenelement aus Liste 1 prüfen, ob es in Liste 2 vorkommt und wenn ja, dann die Kategorie auslesen. Mag sein, dass es geht, aber nur mit vielem unnötigen Aufwand. Du müsstest zunächst jedes Element aus Liste 2 durchsuchen, ob das Element von Liste 1 (z.B. "Golf 7" darin vorkommt. Wenn ja, dann müsstest du dieses Element in Einzel-Zeichen aufsplitten und nachsehen, ab welcher Stelle die Kategorie beginnt, dann ein Zeichen überspringen und dann den Rest als Zahl auslesen, zurück-konvertieren und ausgeben. Mega umständlich und sperrig.

Hast du die Möglichkeit die Listen neu anzulegen? Dann würde ich dir zu einem "Dictionary" raten, bzw. manchmal auch "Hash-Map" genannt. Die sind exakt für Fragestellungen wie die deine gemacht. Kurz gesagt kannst du jedem Listenelement einen Schlüssel zuordnen. Du erhältst sowas wie ein Nachschlagewerk und kannst ab dann dieses Werk befragen. Du sagst: "BMW 535i" und die Hashmap gibt zurück "Kategorie 4" oder auch einfach "4", wie du willst. Das ist rechnerisch schnell und super einfach programmiert.

Kommentar von nilsiscool ,

Danke für deine Antwort.

Nein ich möchte nicht nur die Kategorie ausgegeben haben, es reicht auch aus, wenn das komplette Listenelement ausgegeben wird, also Golf 7 Kategorie 1. macht das die Sache leichter? Er soll sogesagt nur nach dem String Golf 7 in der Liste 2 suchen und wo es drin vorkommt das Listenelement ausgeben.

Kommentar von offeltoffel ,

Ok. Also der Befehl, den du suchst, lautet "in". Ganz simpel ;)

List1 = ["Golf7", "Golf 6", "Polo 9n3", "Mercedes C63", "BMW 535i"]
List2 = ["Mercedes C63 Kategorie 10", "BMW535i Kategorie 4", "Golf7 Kategorie 1"]

Beispiel = List1[0]
for i in range(len(List2)):
if Beispiel in List2[i]:
print List2[i]

Im obigen Fall ist Beispiel das erste Listenelement, also "Golf 7". Er sucht danach in allen Einträgen von List2, ob dieses Element darin vorkommt (x in y). Wenn er einen Treffer hat, schreibt er ihn in die Konsole.

Möchtest du es für jedes Element prüfen, dann musst du die Suche über eine Schleife für jeden Eintrag in List1 wiederholen. Mit einer List-Comprehension geht das schlanker, aber ich weiß nicht, ob du die kennst.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten