Die überprüfung für die Unterliste in der Liste
Die Frage ist: Sie schreiben eine Funktion, genannt isSublist()
, die zwei Argumente nimmt (list, sublist
) und zurück 1
wenn Teilliste ist eine Teilliste der Liste, und sonst 0.
Also ich habe meinen code, jedoch bekomme ich True
wenn die Unterliste ist nicht in der Liste. Irgendwelche Vorschläge, dies zu beheben, bitte?
def isSublist(list, sublist):
for i in range(len(list)-(len(sublist))+1):
return True
if sublist==list[i:i+(len(sublist))]:
return False
Beispiel für die Eingabe:
list= (0,1,2,3,4,5,6,7,8,9)
isSublist(list, [1,2,3])
output:
True
- Können Sie Beispiel für die Eingabe und erwartete Ausgabe? Wenn Sie sagen, Teilliste, meinst du wie in
[1,2,3] in [[1,2,3], [5,6,7]]
oder meinst du[1,2,3] in [1,2,3,4,5,6]
? - Bitte definieren Sie kurz, was meinst du mit eine Unterliste einer Liste
- Und nicht, um zu zählen? Möchten Sie den gleichen Ausgang für die beiden Teillisten
[1, 2, 3]
und[2, 3, 1]
? - durch die Unterliste ich meine in der Liste [1,2,3,4] ist die Teilliste von [1,2] in der Liste. Wenn also print True, wenn nicht False
- Was
sublist = [2, 1]
? Und was ist, wennlist = [1, 1, 2, 2, 3]
undsublist = [1, 2, 3]
? - die Teilliste nicht in umgekehrter Richtung. die Unterliste muss in der Liste erscheinen, genau wie die Liste
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brechen Sie dies, indem Sie immer alle Scheiben die Größe der Teilliste und der Vergleich der Geschlechter:
Zur Deckung der Ausgabe der Bestellung. Eine Liste ist, per definition, bestellt. Wenn wir wollen, zu ignorieren, die Bestellung, die Sie tun können, setzt:
Wenn wir abdecken müssen wiederholte Elemente und ignorieren Bestellung, du bist jetzt im Reich der multimengen:
<=
operator, keine union.return set(sub_list) <= set(list_)
test Ausgabe:
Bearbeitet für unterlisten, die nicht Teilmenge. Hässlicher, aber arbeitet. Hinzufügen könnte ein wrapper um Verwirrung zu vermeiden der Parameter.
isSublist([1, 2, 4], [1, 2, 3, 4])
zurückTrue
falsch.return set(sublist) <= set(list)
Teil des Problems ist, dass in Python
(0,1,2,3,4,5,6,7,8,9)
ist nicht technisch einlist
, es ist eintuple
- das ist im wesentlichen ein immutable (unveränderlich)list
. Auch sollten Sie es vermeiden, benennen Dinge, die in Ihrem Programm die gleichen wie built-in-Funktionen und-Typen, denn Sie müssen gelegentlich auf Sie verweisen und Ihre eigene definition verbergen würde diejenigen, die vom system bereitgestellt werden.Eine einfache Möglichkeit, dies zu umgehen, ist, einfach Anhängen einer
_
an das Ende des namens, wie in der folgenden, die versucht zu drehen, konvertiert das argument in einelist
wenn es nicht eine zunächst. Es testet nicht die Art dersublist
argument, aber eine ähnliche überprüfung kann sinnvoll sein für Sie, zu.Ich habe nur geschrieben ein Rezept für das dieses (dies funktioniert für zusammenhängende Teilliste):
Die Idee ist, eine Verlagerung Fenster (mit der gleichen Breite wie der Kandidat Teilliste) Scannen Sie die superlist und prüfen Sie die Gleichheit zwischen den chunk und die Teilliste, die bei jedem Durchlauf.
Dass ein brute-force-Methode.