[Python-de] Index-Bereiche bei Slices

Stefan Schwarzer sschwarzer at sschwarzer.net
Sam Aug 14 20:54:40 CEST 2004


Hallo,

ich schreibe zur Zeit einen Artikel über Python, und dabei gerade
etwas über Slicing in Sequenzen. Dabei ist mir aufgefallen, dass es
nicht unmittelbar einleuchtend ist, warum man mit

>>> L = [19, 37, 8, 9]
>>> L[1:3]
[37, 8]

bekommt und nicht etwa [37, 8, 9], die Werte für die in der
Slice-Syntax angegebenen Indices 1 bis 3. Gibt es eine für
Python-Einsteiger nachvollziehbare Erklärung, warum sich Slicing (und
die range-Anweisung) so verhalten, wie sie es tun?

Bei http://www.jandecaluwe.com/Tools/MyHDL/manual/intro-slicing.html
habe ich gerade folgendes dazu gefunden:

"""
The half-openness of a slice may seem awkward at first, but it helps
to avoid one-off count issues in practice. For example, the slice
hex[8:] has exactly 8 bits. Likewise, the slice hex[7:2] has 7-2=5
bits.
"""

Ich weiß nicht, ob mich diese Erklärung überzeugt. :-) Mich hat die
Python-Konvention irritiert, als ich zum ersten Mal gemerkt habe, dass
man eine "lückenlose" Folge bekommt, wenn man

L[:5] + L[5:]

schreibt, und nicht etwa

L[:5] + L[6:]

wie ich es zuerst geschrieben hatte. (Der Code lautete natürlich nicht
so, aber er war vom Sinn her ähnlich.) Sonst hatte ich allerdings nie
Probleme mit Pythons Slicing-Konvention.

Kennt jemand von euch noch andere Erklärungen oder Hintergründe zu
diesem Thema?

Viele Grüße
 Stefan