Unklare Listen-Syntax

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
SG ;-)
User
Beiträge: 38
Registriert: Dienstag 26. August 2014, 17:50

Hallo, folgendes Problem:

ich bin gerade dabei, meine allerersten Versuche mit dem Python-Tutorial anzustellen, und schon stoße ich beim Umgang mit Listen auf etwas, das ich nicht verstehe:

Code: Alles auswählen

a = ['spam', 'eggs', 100, 1234]

print(a[-1])
print(a[1:-1])
a[-1] liefert als Ergebnis: 1234
a[1:-1] liefert als Ergebnis aber: ['eggs', 100]

Müsste das Ergebnis in diesem 2. Fall nicht eigentlich ['eggs', 1234] oder (analog zu dem Slicing bei Strings) sogar ['eggs', 100, 1234] lauten?

Ich bitte um Anfänger-Unterricht :)

LG SG ;-)
Me.PEBKAC ^^
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Im ersten Fall hast du einen Indexzugriff, im zweiten Slicing. Mit ``m`` greifst du auf das i-te Element zu, mit ``m[i:j]`` holst du dir die Subliste vom Index i bis einschließlich j-1. Das Element mit dem Index j ist nicht mehr enthalten.
Das Leben ist wie ein Tennisball.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Die Slicing Syntax ist
[von einschließlich : bis ausschließlich : Schrittweite]
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
SG ;-)
User
Beiträge: 38
Registriert: Dienstag 26. August 2014, 17:50

Also, wenn ich das richtig verstanden habe,

dann kann ich einen Slice bei dem das letzte Element der Liste enthalten ist, wenn ich nicht weiß, wie lange die Liste ist, nur so erhalten?

Code: Alles auswählen

a[1:len(a)]
LG SG ;-)
Me.PEBKAC ^^
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

so geht's auch

Code: Alles auswählen

a[1:]
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
SG ;-)
User
Beiträge: 38
Registriert: Dienstag 26. August 2014, 17:50

Cool,

das gefällt mir. :)

Thx

LG SG ;-)
Me.PEBKAC ^^
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Die Slicing Syntax ist
[von einschließlich : bis ausschließlich : Schrittweite]
wobei "von einschließlich", "bis ausschließlich" oder "Schrittweite" auch leer oder None oder weggelassen werden dürfen.
Es werden dann sinnvolle Defaultwerte eingesetzt:
von einschließlich: von Anfang an (einschließlich), das muss nicht 0 sein (wenn z.B. die Schrittweite negativ ist)
bis ausschließlich: bis zum Ende (einschließlich)
Schrittweite: 1
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
SG ;-)
User
Beiträge: 38
Registriert: Dienstag 26. August 2014, 17:50

@MagBen

Ja, danke nochmal.

Das erhellt mir grade einiges, das ich hier in dem Tutorial sehe.

LG SG ;-)
Me.PEBKAC ^^
BlackJack

@SG ;-): Bezüglich des Nebensatzes im ersten Beitrags: Slicing verhält sich bei Zeichenketten genau so wie bei Listen, da gibt es also keinen Unterschied. Auch bei Zeichenketten ist ``s[1:-1]`` alles ausser dem ersten und dem letzten Element.
Benutzeravatar
SG ;-)
User
Beiträge: 38
Registriert: Dienstag 26. August 2014, 17:50

@BlackJack

Gut zu wissen.

Thx

LG SG ;-)
Me.PEBKAC ^^
BlackJack

Und um noch mal Korinthen zu kacken: Der Betreff ist ein wenig zu speziell, denn das ist keine Listen-Syntax sondern allgemeiner Syntax für einen Indexzugriff mit einem `slice`-Objekt als Argument. Der Ausdruck links davon muss nicht zwingend zu einer Liste ausgewertet werden, was man alleine an der Syntax ja auch gar nicht so einfach feststellen kann, ausser wenn da eine literale Liste steht. Es war wahrscheinlich „Unklare Semantik bei Listen und Slice-Zugriff” gemeint. :-)
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Auf http://perso.limsi.fr/pointal/python:memento wird es unter "Indexation des séquences" gut dargestellt.
Der Text ist auf französisch, aber die Diagramme sind dennoch allgemein verständlich.

PDF: http://perso.limsi.fr/pointal/_media/py ... ython3.pdf
ODF: http://perso.limsi.fr/pointal/_media/py ... nglish.odg
Antworten