Seite 1 von 1

einfaches find rekursiv verwenden

Verfasst: Samstag 7. August 2021, 13:56
von PyPengu
Hallo Leute,

heute wollte ich ohne Anleitung einfach mal mit der 'find'-Methode drauf los probieren. Ich möchte alle Positionen an denen der Sub-String gefunden wird ausgeben. Aber ich stecke seit 1-2 Stunden fest. Den Plan was ich alles schon versucht habe, den habe ich auch nicht mehr.

Mein Code-Schnipsel wäre hier.

Vielen Dank!

Re: einfaches find rekursiv verwenden

Verfasst: Samstag 7. August 2021, 21:05
von Sirius3
Wenn man nicht weiter kommt, hilft es, Schritt für Schritt auszugeben, welche Werte die einzelnen Variablen haben. Dann merkst Du, dass Du mit `text = text[resultat:]` immer dafür sorgst, dass der Suchtext ganz am Anfang von text steht.
Dann gibt es ganz am Ende noch das Problem, dass find zwar -1 zurückliefert, Du aber trotzdem nochmal positionen erweiterst.
Wenn man einer Variable einen Dummywert geben muß, damit eine while-Schleife startet, hat man eigentlich eine while-True-Schleife, die an der passenden Stelle per break beendet wird.

Code: Alles auswählen

positionen = []
altes_resultat = 0
while True:
    resultat = text.find(suche)
    if resultat < 0:
        break
    altes_resultat += resultat
    positionen.append(altes_resultat)
    altes_resultat += 1
    text = text[resultat+1:]
Jetzt kennt aber `find` ein zweites Argument, was die Sache viel einfacher macht:

Code: Alles auswählen

positionen = []
aktuelle_position = -1
while True:
    aktuelle_position = text.find(suche, aktuelle_position + 1)
    if aktuelle_position < 0:
        break
    positionen.append(aktuelle_position)
Da aber `find` einen problematischen Rückgabewert hat, wenn der Text nicht gefunden wurde, sollte man besser `index` benutzen:

Code: Alles auswählen

positionen = []
aktuelle_position = -1
try:
    while True:
        aktuelle_position = text.index(suche, aktuelle_position + 1)
        positionen.append(aktuelle_position)
except ValueError:
    pass