Prüfen, ob Liste eine Unterliste ist

9

Ich muss überprüfen, ob list1 eine Unterliste von list2 ist (True; wenn jede in list2 übliche ganze Zahl in list1 in der gleichen Reihenfolge wie list1 ist)

%Vor%

Kann mir jemand helfen ... warum funktioniert das nicht?

    
MMM 12.03.2016, 22:35
quelle

8 Antworten

4
  

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%     
L3viathan 12.03.2016, 22:37
quelle
2

Eine andere Möglichkeit, dies zu tun, ist mit collections.Counter . @ L3viathan die zweite Antwort ist der effizienteste und schnellste Weg, es zu tun.

%Vor%

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.

    
Goodies 13.03.2016 01:17
quelle
2

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.

%Vor%     
Dave Thomas 19.01.2018 17:06
quelle
1

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.

    
M. Morgan 05.01.2018 09:06
quelle
1

Es ist einfach mit Iteratoren.

%Vor%     
Umair Bhatti 28.02.2018 10:18
quelle
0

Eine einfache Möglichkeit zu überprüfen, ob alle Elemente einer Liste in einer anderen Liste sind, besteht darin, beide in Mengen umzuwandeln:

%Vor%     
quelle
0
%Vor%     
Sanjana Mantri 25.09.2017 05:59
quelle
-1

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%     
Geislor Crestani 19.05.2017 17:06
quelle

Tags und Links