partition: Ausdruck in eckigen Klammern verstehen

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
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute,

in der Dokumentation wird die partition wie folgt forgestellt:

Code: Alles auswählen

str,partition(sep)
Für sep steht eine bestimmte und individuelle Zeichenkette. Das können Punkt, Komma etc sein. Soweit verstehe ich es. Wenn man partition() ausführt, erhält man einen Tuple.

In einigen Fällen möchte man einen Text zwischen zwei Zeichen. Dies könnte so aussehen:

Code: Alles auswählen

str.partition('<td>')[-1].rpartition('</td>')[0]
Das heißt, aus:
'<td> BLAAAH </td>'
wird dann:
BLAAAH
Was mich jetzt eher interessiert, ist, was die [-1] und [0] sagen - vor allem -1.

Denn wenn ich einen Tuple habe, sagen wir mal ('foo', 'bar'), und ich will auf 'bar' zugreifen, dann würde ich [1] verwenden, denn [0] liefert mir 'foo'. Im Kontext von partition() tue ich mich damit schwer, die Zahlen in den eckigen Klammern zu verstehen.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@Sophus: Der Indexoperator bedeutet immer das selbe. Ob das Tuple jetzt von `str.partition` erzeugt wird, ist dem Indexoperator egal.
Oder anders ausgedrückt: In Python ist

Code: Alles auswählen

name = expression
name[foo]
immer und für jede mögliche `expression` komplett äquivalent zu

Code: Alles auswählen

expression[foo]
Wie sich der Indexzugriff verhält, ist in Common Sequence Operations (Python 2) dokumentiert.

Für HTML solltest du außerdem eher einen richtigen Parser wie BeautifulSoup oder LXML benutzen und nicht mit `str.partition` selbst was zusammenbasteln.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

str.partition und str.rpartition geben dir halt tuple zurück
einmal greifst du auf das letzte [-1] Element und dann auf das erste [0] zu
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten