Hallo Zusammen,
ich habe eine Liste voller Tupel. Jetzt möchte ich prüfen, ob eine
zweite (kleinere) Liste in der ersten Liste vorhanden ist.
Beispiel:
Gibt es eine Möglichkeit herauszufinden ob liste2 in liste1 enthalten
ist, ohne die ganze Liste in Schleifen zu durchlaufen. Also sowas wie
ein regulärer Ausdruck oder ähnliches?
Danke im voraus.
Mopzhk
Eine Funktion, die prüft, ob eine Liste eine Teilliste einer anderen
Liste ist, gibt es in Python und seiner Standardbibliothek m.W. nicht.
Es bleibt also wohl nichts anderes übrig, als eine entsprechende
Funktion selber zu schreiben.
Der in-Operator prüft, ob der linke Operand ein Element des rechten
Operanden ist, also bspw.
Mit Vorbehalt, denn ich bin nicht umfassend erfahren in Python.
Also, geht man Python 3.7 aus (und vermutlich verhalten sich frühere
Versionen genau so), dann prüft der "in" Operator, ob sich ein Objekt
in einer Liste befindet.
https://docs.python.org/3/reference/expressions.html#membership-test-operations
Man wird das, vermute ich, selber implementieren müssen. Ist aber auch
nicht schwierig, denke ich, wenn man auf die Ausführungsgeschwindigkeit
nicht all zu viel Wert legt. Aber eine Suche nach einer fertigen
Funktion mag sich lohnen.
Theor schrieb:> Man wird das, vermute ich, selber implementieren müssen.> Ist aber auch nicht schwierig, denke ich, wenn man auf> die Ausführungsgeschwindigkeit nicht all zu viel Wert> legt.
Wenn die Listen sortiert sind, genügt ein Durchlauf der
längeren Liste.
Falls sie nicht sortiert sind, gibt es bestimmt eine
einigermaßen effiziente Sortierroutine als Standard-
funktion.
M. H. schrieb:> Gibt es eine Möglichkeit herauszufinden ob liste2 in liste1 enthalten> ist, ohne die ganze Liste in Schleifen zu durchlaufen.
Zuerst musst du einmal genau definieren was mit "liste2 in liste1"
gemeint ist.
Aus dem Rest deines 1. Beitrags und dem 2. gehe ich davon aus du meinst
"Elemente aus liste2 in liste1", liste2 ist also keine Liste aus Listen.
Weitere Fragen:
-Ist die Position in liste2 relevant, also sowas wie Reihenfolge?
-Was ist wenn Elemente in liste1 mehrfach vorkommen? Müssen dann auch
mehrere in liste2 vorhanden sein?
-Sind die Elemente tatsächlich Integer-Tuple, oder ist dein Quelltext
ein Beispiel? Wenn es nur ein Beispiel ist, lassen sich die Elemente
sortieren?
Wenn es nur um die Frage geht 'sind alle Elemente aus Liste2 in Liste1
auch mindestens 1 mal vorhanden:
len(set(list1).intersection(list2)) == len(list2)
Laufzeit: O(n).
Das set ist dein freund es hat eine issubset Funktion die das macht was
du willst. folgender Code sollte "Sublist found" ausgeben. Das
Konvertieren der beiden listen in ein Set macht Python für dich.
Egon D. schrieb:> Theor schrieb:>>> Man wird das, vermute ich, selber implementieren müssen.>> Ist aber auch nicht schwierig, denke ich, wenn man auf>> die Ausführungsgeschwindigkeit nicht all zu viel Wert>> legt.>> Wenn die Listen sortiert sind, genügt ein Durchlauf der> längeren Liste.> Falls sie nicht sortiert sind, gibt es bestimmt eine> einigermaßen effiziente Sortierroutine als Standard-> funktion.
Es ist natürlich nur eine Vermutung, aber ich gehe davon aus, dass die
Abfolge der Elemente in beiden Listen eine Rolle spielt, weil
1. der TO die Listen nicht sortiert hat und
2. Elemente mehrfach vorkommen und
3. der TO mit dem Wort "in" das "Enthaltensein" einer Liste in einer
anderen assoziiert (in seinem Beitrag) anstelle des Enthaltenseins der
Elemente der Liste oder des enthaltenseins einer Liste in einer Liste
von Listen. (Das kann natürlich auch ein fehlgeschlagener Versuch des
prägnanten Ausdrucks sein).
Insofern, gehe ich davon aus, dass die Listen auf keinen Fall sortiert
sein sollen.
Andernfalls hast Du natürlich durchaus recht, diesen Aspekt zu nennen.
Aber danach hat ja noch jemand gefragt. Mal abwarten.
Theor schrieb:> Es ist natürlich nur eine Vermutung, aber ich gehe davon aus, dass die> Abfolge der Elemente in beiden Listen eine Rolle spielt, weil
Das ist richtig.
Die einfachste Lösung für ich war es die beiden Listen in Strings zu
schreiben und dann mit
1
if liste2 in liste1:
zu überprüfen.
Aber Danke für eure Hilfe. Sollte ich die Zeit finden, werde ich mich
nach einer eleganteren Möglichkeit umsehen.
Grüße Mophzk
Theor schrieb:> 1. der TO die Listen nicht sortiert hat und> 2. Elemente mehrfach vorkommen und> 3. der TO mit dem Wort "in" das "Enthaltensein" einer> Liste in einer anderen assoziiert (in seinem Beitrag)> anstelle des Enthaltenseins der Elemente der Liste> oder des enthaltenseins einer Liste in einer Liste von> Listen. (Das kann natürlich auch ein fehlgeschlagener> Versuch des prägnanten Ausdrucks sein).
Ach so. Ich hatte "...ist ... in ... enthalten" als
TeilMENGENbeziehung aufgefasst.
Wenn ich Dich richtig verstehe, wollte der TO aber
wissen, ob Liste2 eine TeilLISTE von Liste1 ist, also
ob Liste1 in der Form "Präfixliste Liste2 Suffixliste"
darstellbar ist.
Das habe ich dann missverstanden. Entschuldigung.