Seite 1 von 1

Anfängerfrage zur Stringverarbeitung

Verfasst: Sonntag 29. März 2009, 11:22
von search
Hallo zusammen,
mir ist da was aufgefallen, wo ich einfach keine Lösung finde:

Code: Alles auswählen

a = 'Das ist ein Test!'
k = []
for x in range(len(l)):
    c = l.index(l[x])
    k.append(c)
print k
>Ausgabe:
[0, 1, 2, 4, 2, 6, 8, 4, 10, 12, 8, 2, 6]
Die Funktion >index gibt ja immer nur den kleinsten Index als Wert zurück (ebenso die Funktion find!). Meine Frage ist nun, gibt es eine Möglichkeit den richtigen Index/Platz von doppelten Zeichen in einem String auszugeben?? Trotz langer Suche habe ich nichts passendes gefunden.
Danke und Gruß
Stefan

Verfasst: Sonntag 29. März 2009, 11:30
von sma
Dein Programm funktioniert nicht. Ich vermute "l == a". Du könntest es übrigens einfacher formulieren:

Code: Alles auswählen

print [l.index(x) for x in l]
Wie definierst du denn den "richtigen" Index? Willst du bei "aba" die Ausgabe [2, 0, 1] haben? Was machst du bei "aaa"? Ist beim zweiten "a" das "richtige" A das erste oder das dritte? Solange du das nicht genau beschreiben kannst, kannst du auch kein Programm dafür schreiben. Wenn du den Algorithmus jedoch genau beschreiben kannst, hast du wahrscheinlich auch schon das Programm.

Mein Tipp: Suche alle Indizes (dazu hilft, das index ein weiteres Argument haben kann), filtere den aktuellen Index heraus, nimm das Minimum dieser Liste und sammle diese Ergebnisse wie zuvor.

Stefan

Verfasst: Sonntag 29. März 2009, 11:37
von search
Hallo sma,
ich glaube du hast mich da falsch verstanden. Du siehst doch bei meinem Beispiel die Ausgabe

Code: Alles auswählen

[0, 1, 2, 4, 2, 6, 8, 4, 10, 12, 8, 2, 6]
und z.B. für den Buchstaben >s ist die erste Position korrekt angegeben mit >2 aber die nächste Position von >s ist wieder mit >2 bezeichnet, obwohl sie ja jetzt schon >5 wäre!
Verstehst du was ich will? Weiß ich überhaupt selber was ich will?? :shock:

Verfasst: Sonntag 29. März 2009, 11:42
von cofi
Nein, sma hat dich schon richtig verstanden.
S.index(sub [,start [,end]]) -> int

Like S.find() but raise ValueError when the substring is not found.
Das 2. Argument ist dein Freund. Eventuell zur Optimierung:
S.count(sub[, start[, end]]) -> int

Return the number of non-overlapping occurrences of substring sub in
string S[start:end]. Optional arguments start and end are interpreted
as in slice notation.

Verfasst: Sonntag 29. März 2009, 11:56
von search
Danke an euch beiden!!
Mein Fehler :oops: !!!