Seite 1 von 1

wie funktioniert ein stringvergleich?

Verfasst: Montag 19. April 2004, 18:56
von hypolink
Ich möchte einen Musterstring mit einem Text vergleichen. Wie erreiche ich, daß ich immer die jeweilige Position x im Text mit Position x im Muster vergleichen kann bevor ich mein Muster weiterrücke . Mit einer Schleifenverschachtelung geht das nicht, da dort ja alle Positionen verglichen werden. Kann man 2 Schleifen kombinieren??
Etwa so:

Code: Alles auswählen

 for i in muster[::-1] && for j in text[::-plen]:
          if i == j
Gruß

Hypolink

Verfasst: Montag 19. April 2004, 19:09
von Dookie
Hi hypolink,

Du solltest mit den Indexen arbeiten, nicht mit den Zeichen im String.

Code: Alles auswählen

found = []
for i in len(text)-len(muster):
    for j in len(muster):
        if muster[j] != text[i+j]:
            break
    else: # for
        found.append(str(i))

print "%s wurde %i mal gefunden an den Positionen %s" % (muster, len(found), ", ".join(found))
einfacher und effizienter gehts aber mit den Stringmethoden oder mit regular Expressons.


Gruß

Dookie

Iteration over non-sequence

Verfasst: Montag 19. April 2004, 21:37
von hypolink
Hallo Dookie,

danke für die schnelle Antwort. Leider gibt es noch ein Problem. Wenn ich es so ausprobiere, bekomme ich die Fehlermeldung "Iteration over non-Sequence". Oder sollte ich die Schleife besser mit xrange basteln?

Gruß
Hypolink

Verfasst: Montag 19. April 2004, 21:45
von Dookie
uups :oops:

Code: Alles auswählen

found = []
for i in xrange(len(text)-len(muster)+1):
    for j in xrange(len(muster)):
        if muster[j] != text[i+j]:
            break
    else: # for
        found.append(str(i))

print "%s wurde %i mal gefunden an den Positionen %s" % (muster, len(found), ", ".join(found))
so gehts, man sollte den geposteten code doch immer auch selber testen ;)


Gruß

Dookie

schrittweite der iteration beeinflussen

Verfasst: Montag 19. April 2004, 22:52
von hypolink
Super! Bin gut voran gekommen. Letzte Frage für heute. Wie kann ich mein Muster um mehr als einen Zähler am Text entlang verschieben? Kann ich i irgendwie hochsetzen? Habe schon probiert eine Variable einzuführen, die die Iteration bei Bedarf verändert, hat aber nicht geklappt.

Code: Alles auswählen

for i in xrange(0,tlen-plen+1,1+shift):

Verfasst: Montag 19. April 2004, 23:10
von Dookie
dann musst Du mit einer while-Schleife arbeiten. for-Schleifen iterieren immer über eine Sequenz.

Code: Alles auswählen

i = 0
while i < 10:
    print i
    if i == 3:
        i += 3
    else:
        i += 1

Gruß

Dookie