Bei einem String das letzte Zeichen löschen.

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.
Antworten
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Dienstag 9. September 2008, 15:57

Hallo,
wie kann ich denn von einem string, wie

a = "Hallo"

das letzte Zeichen, also in diesem Fall "a" löschen..

--> a = "hall"


Schon mal Danke :-)


Liebe Grüße

Teabag
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Dienstag 9. September 2008, 16:09

Slicing:

Code: Alles auswählen

>>> a = "Hallo"[:-1]
>>> a
'Hall'
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Dienstag 9. September 2008, 16:40

vielen Dank :-)
abgdf

Dienstag 9. September 2008, 19:54

Hall,

da möchte ich gern noch eine Frage anschließen:

Es ginge ja auch

Code: Alles auswählen

print "Hallo".rstrip("o")
Leider verhält sich ".rstrip()" nicht immer so, wie ich es erwarte, nämlich wie Perls "chomp()" für beliebige Zeichen, vor allem wenn ich mehrere Zeichen an ".rstrip()" übergebe.

Weiß jemand, woran das liegt ???

Mein Hack dort herum:

Code: Alles auswählen

def chomp(a, b = "\n"):

    if len(a) < len(b):
        return a

    if a.endswith(b):
        return a[0: len(a)-len(b)]

    return a

def rstrip2(a, b = "\n"):
    return chomp(a, b)

print rstrip2("Hallo", "o")
Kann ja auch nicht immer Sinn der Sache sein ...

Viele Grüße
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 9. September 2008, 20:05

abgdf hat geschrieben:Leider verhält sich ".rstrip()" nicht immer so, wie ich es erwarte, nämlich wie Perls "chomp()" für beliebige Zeichen, vor allem wenn ich mehrere Zeichen an ".rstrip()" übergebe.
Wie willst du denn dass es sich verhält?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
abgdf

Mittwoch 10. September 2008, 01:01

Wie willst du denn dass es sich verhält?
Ok, hier ein Beispiel:

Code: Alles auswählen

print "Hallo".rstrip("loo")
ergibt "Ha" :shock:.

Ich will aber, daß der Teilstring am Ende nur dann entfernt wird, wenn er auch wirklich mit dem Ende des Hauptstrings übereinstimmt, sonst soll wiederum der Hauptstring zurückgegeben werden (wie bei Perls "chomp()" im Gegensatz zu Perls "chop()").
Also

Code: Alles auswählen

print "Hallo".rstrip("llo")
soll "Ha" ergeben, aber

Code: Alles auswählen

print "Hallo".rstrip("loo")
soll wieder "Hallo" zurückgeben (was es nicht tut).
Mit meinem "rstrip2()" oben geht, was ich will, aber vielleicht gibt es dazu ja auch eine eingebaute Python-Funktion ?

Viele Grüße
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Mittwoch 10. September 2008, 01:21

Code: Alles auswählen

In [24]: "Hallo".replace("loo", "")
Out[24]: 'Hallo'

In [25]: "Hallo".replace("llo", "")
Out[25]: 'Ha'
._.?
BlackJack

Mittwoch 10. September 2008, 04:43

@BlackVivi: Nope das ersetzt ja alle 'loo' oder 'llo' in der Zeichenkette und nicht nur wenn sie am *Ende* stehen.

@abgdf: `rstrip()` macht das was in der Doku steht, wenn Du die gelesen hast und etwas anderes erwartest, ist wohl Deine Erwartung falsch.

Deine `chomp()`-Funktion ist kein Hack, sondern eine Implementierung der Funktion, die Du haben möchtest.

Ist aber noch ein wenig Verbesserungswürdig. Den Längentest würde ich weg lassen, der ist mit `str.endswith()` doch schon abgedeckt. Und die Längen brauchst Du nicht voneinander abziehen, ``-len(b)`` reicht aus.

Und wenn Du das ganze zusätzlich unter dem Namen `rstrip2` verfügbar machen willst, dann spar Dir die extra Funktion und weise einfach das bereits vorhandene Funktionsobjekt zu. Andererseits macht `rstrip()` nicht das gleiche wie `chomp()` also ist so ein Name vielleicht etwas irreführend.
abgdf

Mittwoch 10. September 2008, 20:05

@BlackJack: Ok, meine Funktionen sind natürlich immer nur so gut wie mein Wissensstand. Und der kann sicher immer verbessert werden :P.
Aber immerhin bin ich nicht der einzige, der über ".rstrip()" gestolpert ist:

http://mail.python.org/pipermail/python ... 31408.html

Viele Grüße
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 10. September 2008, 20:44

Ja, das wird oft falsch angenommen. Die Doku hat allerdings inzwischen eine dicke Warnung und Bespiele dazu.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten