Anfängerfrage zur Stringverarbeitung

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.
search
User
Beiträge: 67
Registriert: Donnerstag 24. April 2008, 10:03
Wohnort: In Deutschland

Anfängerfrage zur Stringverarbeitung

Beitragvon search » Sonntag 29. März 2009, 11:22

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Sonntag 29. März 2009, 11:30

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
search
User
Beiträge: 67
Registriert: Donnerstag 24. April 2008, 10:03
Wohnort: In Deutschland

Beitragvon search » Sonntag 29. März 2009, 11:37

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:
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Sonntag 29. März 2009, 11:42

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.
search
User
Beiträge: 67
Registriert: Donnerstag 24. April 2008, 10:03
Wohnort: In Deutschland

Beitragvon search » Sonntag 29. März 2009, 11:56

Danke an euch beiden!!
Mein Fehler :oops: !!!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder