Seite 1 von 1
list slicing für das ersetzen eines indexes verwenden?
Verfasst: Samstag 21. Mai 2011, 09:47
von Gremlin
Hallo,
gestern ist mir durch einen kleinen Fehler aufgefallen, dass es möglich ist einen Index zu ersetzen indem man ähnlich wie bei einem dictionary vorgeht:
Bisher habe ich für soetwas "pop" und "insert" verwendet, aber nun tendiere ich doch eher dazu, das slicing zu verwenden. Aber warum ich überhaupt hier schreibe.. sollte ich das? Denn ich habe nichts "offizielles" darüber gefunden. Hab auch extra nochmal im Tutorial nachgesehen. Und bevor das jetzt irgendwas ist, was halt nur "zufällig" funktioniert...
Re: list slicing für das ersetzen eines indexes verwenden?
Verfasst: Samstag 21. Mai 2011, 10:00
von cofi
Nein, das ist kein Zufall, sondern wohldefinierte Semantik.
Code: Alles auswählen
In [1]: a = range(5)
In [2]: a.__setitem__?
Type: method-wrapper
Base Class: <type 'method-wrapper'>
String Form: <method-wrapper '__setitem__' of list object at 0x22ae320>
Namespace: Interactive
Docstring:
x.__setitem__(i, y) <==> x[i]=y
In [3]: a.__setitem__(3, "x")
In [4]: a
Out[4]: [0, 1, 2, 'x', 4]
Kannst du also ohne weiteres nutzen

Re: list slicing für das ersetzen eines indexes verwenden?
Verfasst: Samstag 21. Mai 2011, 10:04
von Gremlin
Danke, dann ist ja gut

Re: list slicing für das ersetzen eines indexes verwenden?
Verfasst: Samstag 21. Mai 2011, 10:06
von BlackJack
@Gremlin: Im Tutorial steht das aber:
http://docs.python.org/tutorial/introduction.html#lists
Und da steht auch wie sich das bei Slicing verhält, was Du zwar ansprichst aber nicht zeigst. Und wenn Du das mit Slicing wusstest, ist es schon sehr komisch das Du nicht darauf gekommen bist es mit nur mit einem Index anstelle der Slice-Syntax zu versuchen. Oder bezeichnest Du `pop()` und `insert()` irrtümlich als Slicing?
Re: list slicing für das ersetzen eines indexes verwenden?
Verfasst: Samstag 21. Mai 2011, 10:12
von HerrHagen
Gremlin hat geschrieben:Denn ich habe nichts "offizielles" darüber gefunden. Hab auch extra nochmal im Tutorial nachgesehen. Und bevor das jetzt irgendwas ist, was halt nur "zufällig" funktioniert...
Ich glaub du hast es einfach übersehen...
http://docs.python.org/tutorial/introduction.html#lists
Code: Alles auswählen
Unlike strings, which are immutable, it is possible to change individual elements of a list:
>>> a
['spam', 'eggs', 100, 1234]
>>> a[2] = a[2] + 23
>>> a
['spam', 'eggs', 123, 1234]
Re: list slicing für das ersetzen eines indexes verwenden?
Verfasst: Samstag 21. Mai 2011, 10:20
von Gremlin
Ja, habs wohl übersehen.
@BlackJack
Ich weiß nicht so recht worauf du hinaus möchtest. Unter Slicing verstehe ich alles was mit eckigen Klammern auf Objekten angewendet werden kann. Ist das falsch?
Re: list slicing für das ersetzen eines indexes verwenden?
Verfasst: Samstag 21. Mai 2011, 11:17
von cofi
Gremlin hat geschrieben:Ich weiß nicht so recht worauf du hinaus möchtest. Unter Slicing verstehe ich alles was mit eckigen Klammern auf Objekten angewendet werden kann. Ist das falsch?
Kann man sagen: Ja, Slices haben eckige Klammern, aber noch dazu einen Doppelpunkt. Machen wir mal direkt weiter mit den Dunder Methods:
Python unterscheidet zwischen dem oben gezeigten `__(set|get)item__` und `__(set|get)slice`:
Code: Alles auswählen
In [1]: a = range(5)
In [2]: a.__getslice__?
Type: method-wrapper
Base Class: <type 'method-wrapper'>
String Form: <method-wrapper '__getslice__' of list object at 0x220b320>
Namespace: Interactive
Docstring:
x.__getslice__(i, j) <==> x[i:j]
Use of negative indices is not supported.
In [3]: a.__setslice__?
Type: method-wrapper
Base Class: <type 'method-wrapper'>
String Form: <method-wrapper '__setslice__' of list object at 0x220b320>
Namespace: Interactive
Docstring:
x.__setslice__(i, j, y) <==> x[i:j]=y
Use of negative indices is not supported.