Ich bekommen bei folgendem Beispiel nicht das erwartet Ergebnis:
L = [1,2,3,4,5,6]
L[1:3]= [99]
Das Ergebnis ist: [1, 99, 4, 5, 6]
Erwartet hätte ich: [1,99,99,99,5,6]
Vielen Dank für eure Erklärung
Listen slicing
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nun, du ersetzt einen Listenteil mit einer Singleton Liste, warum sollte daraus ploetzlich eine dreielementige Liste werden?
Kurze Antwort: Deine Erwartung ist nunmal falsch.
Laengere Antwort: Weisst du an einen Slice zu, muss auf der rechten Seite ein Iterable sein, das an dessen Stelle eingefuegt wird:
Deine Erwartung wuerde aber erfordern, dass du auch einzelne Elemente so einfuegen kannst. Warum _diese_ Semantik? Weil man nunmal viel haeufiger das implementierte Verhalten braucht als das, das du erwartest
Noch dazu kann man letzteres ganz einfach emulieren:
Kurze Antwort: Deine Erwartung ist nunmal falsch.
Laengere Antwort: Weisst du an einen Slice zu, muss auf der rechten Seite ein Iterable sein, das an dessen Stelle eingefuegt wird:
Code: Alles auswählen
In [1]: L = range (1, 6)
In [2]: L[1:3] = 99
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-70adb66d4273> in <module>()
----> 1 L[1:3] = 99
TypeError: can only assign an iterable
In [3]: L[1:3] = [99]
In [4]: L
Out[4]: [1, 99, 4, 5]
Noch dazu kann man letzteres ganz einfach emulieren:
Code: Alles auswählen
In [5]: L = range (1, 6)
In [6]: L[1:3] = [42] * 3
In [7]: L
Out[7]: [1, 42, 42, 42, 4, 5]
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Probier's mal mit Numpy Beim slicing hat man bis zu drei Parameter:
L[ von einschließlich : bis ausschließlich : Schrittweite]
Wird ein Parameter weggelassen, so wird ein Defaultwert genommen
von: Anfang
bis: Ende
Schrittweite: 1
Interessant wird's mit negativen Parametern:oder mit mehrdimensionalen Arrays
Code: Alles auswählen
import numpy as np
L = np.array([1,2,3,4,5,6])
L[1:3] = 99
print L # [ 1 99 99 4 5 6]
L[ von einschließlich : bis ausschließlich : Schrittweite]
Wird ein Parameter weggelassen, so wird ein Defaultwert genommen
von: Anfang
bis: Ende
Schrittweite: 1
Interessant wird's mit negativen Parametern:
Code: Alles auswählen
print L[::-1] # [ 6 5 4 99 99 1]
print L[:-3] # [ 1 99 99]
Code: Alles auswählen
A = np.arange(24)
A.shape = 4,6
print A
#[[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]
# [18 19 20 21 22 23]]
print A[:,1] # 2.Spalte
# [ 1 7 13 19]
print A[1:3,2:4]
# [[ 8 9]
# [14 15]]
@gerald123: Dein Beispiel ist glaube ich falsch gewählt, oder hättest Du tatsächlich erwartet das die Operation *zwei* Elemente durch *drei* ersetzt und die Liste damit ein Element länger wird‽