Seite 1 von 1

string korrekt spalten

Verfasst: Donnerstag 2. März 2006, 13:37
von MatMat
Halllo ich habe einen string:
st = "ich <h> bin hier </h> und habe das hier <h> gemacht </h>"
jetzt habe ich eine liste von den positionen der <h> und </h>
bsp:
lst = [(4,6),(22,24)]

wie kann ich den string so verändern
dass ich einmal die vorderen <h> ... </h> und alles dazwischen weglasse
und einemal die hinteren ? Bei 2en geht es noch aber bei dreien....

Code: Alles auswählen

for tupel in lst:
                        c = st
                        extract_lst = lst[:]
                        extract_lst.remove(tupel)
                        for ex_tupel in extract_lst:
                                c = c[:ex_tupel[0]] + c[ex_tupel[1]:]

Verfasst: Donnerstag 2. März 2006, 13:48
von Python 47
Wenn ich dich richtig verstanden habe:

Code: Alles auswählen

import string
st = "ich <h> bin hier </h> und habe das hier <h> gemacht </h>" 
string.split(st)
Dann hast du eine Liste, mit der du die Elemente, die du nicht haben willst, weglassen kannst!

Ich hoffe, das ist das, was du wolltest!

Verfasst: Donnerstag 2. März 2006, 14:30
von MatMat
danke für die Antwort
aber ich brauche was anderes:
nochmals einfacher:
Ich habe einen string: "abcdefghijklmnopqrstuvxyz"
jetzt habe ich eine liste von tupeln : lst = [(2,5)(7,8)(13,15)]
jetzt will ich drei varianten des strings bekommen.
1) den string ohne alles was zwischen (7,8) und (13,15) ist
2) den string ohne alles was zwischen (2,5) und (13,15) ist
3) den string ohne alles was zwischen (2,5) und (7,8) ist

Verfasst: Donnerstag 2. März 2006, 16:07
von synopia

Code: Alles auswählen

def strcut( s, p ):
    m,n = p
    return s[:m]+s[n+1:]

a = "abcdefghijklmnopqrstuvxyz"
list = [(2,5),(7,9),(13,15)]
print strcut(a, list[0] )
print strcut(a, list[1] )
print strcut(a, list[2] )
Die strcut Methode schneidet aus dem übergebenen String (s) alle Zeichen heraus, die an den Positionen innerhalb des ebenfalls übergebenen Tupels (p), liegen.
Also strcut("01234", (1,2)) liefert: "034"

Verfasst: Donnerstag 2. März 2006, 16:08
von mawe
Hi!

Für den Fall (2,5), (13,15):

Code: Alles auswählen

s = "abcdefghijklmnopqrstuvwxyz"
new = s[:2] + s[5:13] + s[15:]
(Die Indizes könnten um 1 nicht stimmen, ich bin jetzt zu müde um das zu prüfen :))

Gruß, schläfriger mawe

Verfasst: Donnerstag 2. März 2006, 20:08
von MatMat
Danke für die Antworten,
aber das ist nicht das was ich brauche :oops:

bei beiden varianten wird der string doch zuerst geändert und dann erst die nächste cut-operation ausgeführt. Ich habe eine unbestimmt lange liste...also es können 5 8 oder 1999 elemente in der liste sein die den string cutten sollen.
wenn ich jetzt aber eine cut-operation mache schrumpft der string und die nächste cut-operation wäre nicht mehr da wo sie ursprünglich hätte sein sollen.....wenn Ihr versteht. Ich bräuchte irgendwie ne allgmeine methode für beliebig lange listen um den string auf einen schlag zu cutten....ewnn das überhautp geht... :(

Verfasst: Donnerstag 2. März 2006, 20:19
von synopia
Dann musst du die Liste von hinten beginnend abarbeiten und die Strings ausschneiden. Oder alternativ die bisher weggeschnitte Buchstabenanzahl von den Werten der Tupel abziehen. Wobei ersteres wohl eleganter ist :-) Dabei muss die Liste natuerlich aufsteigend sortiert sein, bzw du musst sie vorher sortieren.

Verfasst: Freitag 3. März 2006, 03:01
von Kompottkin
MatMat hat geschrieben:bei beiden varianten wird der string doch zuerst geändert und dann erst die nächste cut-operation ausgeführt.
Um eine kurze und prägnante Antwort zu geben: nein :)

Strings sind in Python nicht veränderbar. Solange Du den Namen des Strings nicht überschreibst, bleibt er Dir unter ebendiesem immer erhalten. Der obige Code mit strcut läßt den Namen a immer unverändert, und da sich ein String nicht ändern kann, bleibt a immer gleich »abcdefghijklmnopqrstuvxyz«.

Stelle Dir zum Beispiel vor, Du möchtest in einem String alle Klein- durch Großbuchstaben ersetzen. Die Methode dafür ist upper. Rate mal, was der folgende Code macht:

Code: Alles auswählen

a = "abc"
a.upper()
print a
Du wirst erstaunt sein, daß a.upper() für sich genommen absolut gar keinen Effekt hat. Die Methode verändert nämlich den String a überhaupt nicht, stattdessen wird ein neuer String »ABC« zurückgeliefert und, da kein Name angegeben wurde, verworfen. Effektiver ist der folgende Code:

Code: Alles auswählen

a = "abc"
b = a.upper()
print b
Natürlich befindet sich unter dem Namen a auch danach immer noch der String »abc«.

Merke also: Strings sind in Python unveränderlich (immutable).

Verfasst: Freitag 3. März 2006, 09:41
von MatMat
:)
Danke euch. Wieder was dazugelernt und mein Problem im Griff
Merci :)