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.
hypolink

wie funktioniert ein stringvergleich?

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

Beitragvon Dookie » 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

Iteration over non-sequence

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

Beitragvon Dookie » 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

schrittweite der iteration beeinflussen

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

Beitragvon Dookie » 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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]