python-Liste und Unterliste
Ich haben zu prüfen, ob Liste1 enthalten ist, in list2. Es sollte auch prüfen, ob es angezeigt wird in dieser Reihenfolge in die Liste als gut. Wenn es stimmt, sollte es true zurück und false, wenn nicht.
def check(lst1, lst2):
for x in lst1:
for y in lst2:
xx = lst1.sort()
yy = lst2
if xx != yy:
return False
else:
return True
Ich bin verwirrend, mich mit den for-Schleifen und auch, ich weiß nicht, wo gehen Sie von hier aus zu beheben mein code. Zeiger bitte?
Beispiel dafür, was es tun sollte:
check([4,0],[9,1,4,6,8,9])
True
check([1,2],[2,3,1])
False
In Ihrem Beispiel, warum ist die erste Prüfung, die "True" zurückgeben? Zero ist nicht in der zweiten Liste.
Wenn list1 muss enthalten sein, in der Reihenfolge, in liste2, verliert man nicht die Reihenfolge beim Sortieren()?
Warum tun Sie sich die Mühe machen, um eine Schleife über die beiden Listen, wenn Sie nicht immer verwenden Sie die Elemente
Wenn list1 muss enthalten sein, in der Reihenfolge, in liste2, verliert man nicht die Reihenfolge beim Sortieren()?
Warum tun Sie sich die Mühe machen, um eine Schleife über die beiden Listen, wenn Sie nicht immer verwenden Sie die Elemente
x
und y
im Körper der Schleife?InformationsquelleAutor 97834657647563 | 2011-02-28
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich dachte, das problem war, das betteln um gelöst zu werden rekursiv, also ich habe:
Edit:
Kurze Erklärung:
Zuerst überprüfen wir, ob die Liste, die wir suchen, ist leer (das ist wichtig, wenn wir die Berufung selbst), da alle Listen die leere Liste drin, wir True zurück. Dann versuchen wir, das finden des ersten Elements der Liste, die wir suchen in der Liste, die wir betrachten. Wenn wir Sie finden, dann rufen wir die Funktion wieder, aber ändern Sie die Argumente ein bisschen: wir haben bereits angeschaut, das erste Element der 'Nadel' und sah es im 'Heuhaufen'. So, jetzt müssen wir überprüfen, ob der Rest der 'Nadel' im übrigen 'Heuhaufen'. So rufen wir die Funktion erst wieder mit dem Rest der beiden Listen. Der Rest der Nadel ist alles, aber das erste element und den Rest der Heuhaufen ist alle Elemente, nachdem wir Sie gefunden. Wenn wir an einen Punkt gelangen, wo die erste Liste leer ist, bedeutet es, dass wir es in den Heuhaufen. Wenn es eine Ausnahme, was wir gesucht haben nicht gefunden, so dass wir False zurück, die Bläschen oben auf dem Aufruf-stack und ruft zurück.
index
gibt den index des Elements gesucht, und Python verwendet die halb-offenen Intervalle, so haystack[offset:] würde nicht entfernen Sie die gesuchte Element aus Heuhaufen.Danke, ich habe es behoben.
Danke, war super einfach zu verstehen!!!
Warten Sie nicht, Sprach viel zu schnell, ich habe versucht, diesen code als Modell für die mine. Dann nachdem ich auf 'return check(Nadel[1:], haystack[offset+1:])' ich komplett verwirrt mich. Erklärung? Sorry, ich bin ziemlich neu bei python.
Ich bearbeitet meine ursprüngliche Antwort mit einer Erklärung.
InformationsquelleAutor yan
Könnte man anfangen mit etwas wie:
um zu sehen, ob lst1 wird, die in lst2 ignorieren um. Wenn es an den test, der eine Liste enthalten ist, innerhalb der anderen, dann könnte man etwas machen wie:
Ursprünglich habe ich festgestellt, dass die erste Prüfung war irrelevant angesichts der zweiten, obwohl Sie müssten, um die ordnungsgemäße Abwicklung der
ValueError
wenn das erste element von lst1 ist nicht in lst2.Edit:
Nur als Randnotiz, die ich im Vergleich eine version von meinem code vs yan und mir ist deutlich schneller unter fast alle Anwendungsfälle, besonders wenn len(lst1) ist größer (bis zu 200x speedup vs yan Umsetzung). Probieren Sie es aus mit der
timeit
Modul.Als Erklärung, wie es funktioniert
ii = lst2.index(lst1[0])
findet der index imlst2
entspricht das erste element deslst1
. Wenn das Element fehltlst2
es fängt dasValueError
und zurückFalse
. Wenn das element nicht existiert,lst2[ii:ii+len(lst1)] == lst1
vergleicht allelst1
vs die Teilliste vonlst2
ab dem übereinstimmenden element und nehmen den nächstenlen(lst)
Elemente.Deine Lösung interessiert mich, vor allem diese Zeile: wenn lst2[ii:ii+len(lst1)] == lst1:. Tun Sie etwas dagegen, er es mir erklärt?
Hinzugefügt tatsächliche Umsetzung und Erklärung
Ihre Antwort kann schneller sein, als yan-Algorithmus, aber das ist, weil es falsch ist. Sie sind, vorausgesetzt, die Elemente in lst1 sind aufeinanderfolgend in lst2. yan ist der traditionelle Algorithmus zur Lösung dieses Problems.
InformationsquelleAutor JoshAdel
Sicher, ich dachte, ich würde zeigen, wie löst man einen Fall, und der OP kann verallgemeinern aber Sie mag.
OP: können Sie rufen zip mit mehr als zwei Listen - so bekommen by_threes Sie tun konnte
zip(a, a[1:], a[2:])
...InformationsquelleAutor Matt Curtis