wie funktioniert ein stringvergleich?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hypolink

Montag 19. April 2004, 18:56

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 19. April 2004, 19:09

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
hypolink

Montag 19. April 2004, 21:37

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 19. April 2004, 21:45

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
hypolink

Montag 19. April 2004, 22:52

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):
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 19. April 2004, 23:10

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
Antworten