Ich muss prüfen, ob list1 eine Unterliste zu list2 ist (True; wenn jede in list2 übliche list2 in der gleichen Reihenfolge wie in list1 ist)
Ihr Code funktioniert nicht, denn sobald ein Listenelement in ls1 nicht in ls2 vorkommt, wird sofort False zurückgegeben.
Dadurch werden zwei Listen erstellt, die nur die allgemeinen Elemente enthalten (aber in ihrer ursprünglichen Reihenfolge) und dann True zurückgeben, wenn sie identisch sind:
%Vor%edit: Eine speichereffiziente Variante:
%Vor% Eine andere Möglichkeit, dies zu tun, ist mit collections.Counter
. @ L3viathan die zweite Antwort ist der effizienteste und schnellste Weg, es zu tun.
Sein zweiter Weg ist um eine Größenordnung schneller, aber ich wollte die Counter-Variante wegen ihrer Verbreitung und Verwendung außerhalb dieses Szenarios erwähnen.
Speichereffiziente Lösung basierend auf M. Morgans Antwort. Berücksichtigt, dass die Unterliste in der Superliste in der gleichen Reihenfolge gefunden werden muss, um eine Unterliste zu sein.
Die Variable k
verfolgt die Länge der übereinstimmenden Zeichen. Wenn dies mit der Länge unserer Unterliste übereinstimmt, können wir true zurückgeben.
Die Variable s
verfolgt den Startwert. Ich behalte das im Auge, so dass ein Testfall wie sublist(["1", "1", "2"],["0", "1", "1", "1", "2", "1", "2"])
mit irrelevanten Wiederholungen des ersten Eintrags keinen Einfluss auf den aktuellen Index hat, wenn er nicht angepasst wird. Sobald der Startwert sich ändert, wird s
irrelevant, so dass dieser Fall nicht in der Mitte eines Musters ausgelöst wird.
Ich fand die oben gefundenen ['a', 'b', 'd'] als eine Unterliste von ['a', 'b', 'c', 'e', 'd'], die möglicherweise nicht wahr, obwohl alle Elemente der Unterliste in der Liste vorhanden sind. Also um die Reihenfolge einzuhalten und ich kam auf:
%Vor%Obwohl dies nicht sehr speichereffizient ist, finde ich, dass es mit kleinen Listen recht gut funktioniert.
Eine einfache Möglichkeit zu überprüfen, ob alle Elemente einer Liste in einer anderen Liste sind, besteht darin, beide in Mengen umzuwandeln:
%Vor%Ein weiterer einfacher Weg ist Listenverständnis Und verwenden Sie die integrierte Funktion all , um zu überprüfen, ob alle Elemente in list1 in list2 enthalten sind.
Beispiel:
%Vor%Tags und Links python python-3.x python-2.7