string korrekt spalten

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.
MatMat
User
Beiträge: 11
Registriert: Mittwoch 1. März 2006, 17:34

string korrekt spalten

Beitragvon MatMat » Donnerstag 2. März 2006, 13:37

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]:]
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Donnerstag 2. März 2006, 13:48

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!
mfg

Thomas :-)
MatMat
User
Beiträge: 11
Registriert: Mittwoch 1. März 2006, 17:34

Beitragvon MatMat » Donnerstag 2. März 2006, 14:30

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
Benutzeravatar
synopia
User
Beiträge: 17
Registriert: Mittwoch 1. März 2006, 19:47

Beitragvon synopia » Donnerstag 2. März 2006, 16:07

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"
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Donnerstag 2. März 2006, 16:08

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
MatMat
User
Beiträge: 11
Registriert: Mittwoch 1. März 2006, 17:34

Beitragvon MatMat » Donnerstag 2. März 2006, 20:08

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... :(
Benutzeravatar
synopia
User
Beiträge: 17
Registriert: Mittwoch 1. März 2006, 19:47

Beitragvon synopia » Donnerstag 2. März 2006, 20:19

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.
Kompottkin
User
Beiträge: 21
Registriert: Sonntag 26. Februar 2006, 03:09
Wohnort: Penzberg
Kontaktdaten:

Beitragvon Kompottkin » Freitag 3. März 2006, 03:01

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).
MatMat
User
Beiträge: 11
Registriert: Mittwoch 1. März 2006, 17:34

Beitragvon MatMat » Freitag 3. März 2006, 09:41

:)
Danke euch. Wieder was dazugelernt und mein Problem im Griff
Merci :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder