Meer
Begrijpen van slice notatie
Ik heb een goede uitleg nodig (referenties zijn een plus) over Python's slice notatie.
Voor mij moet deze notatie een beetje opgepikt worden.
Het ziet er zeer krachtig uit, maar ik'heb mijn hoofd er nog niet helemaal bij.
2992
3
Het is eigenlijk heel simpel:
Er is ook de
step
waarde, die met elk van de bovenstaande kan worden gebruikt:Het belangrijkste punt om te onthouden is dat de
:stop
waarde de eerste waarde vertegenwoordigt die niet in de geselecteerde slice zit. Dus, het verschil tussenstop
enstart
is het aantal geselecteerde elementen (alsstep
1 is, de standaard).De andere eigenschap is dat
start
ofstop
een negatief getal kan zijn, wat betekent dat het telt vanaf het einde van de array in plaats van het begin. Dus:Op dezelfde manier kan
step
een negatief getal zijn:Python is vriendelijk voor de programmeur als er minder items zijn dan waar je om vraagt. Als je bijvoorbeeld vraagt om
a[:-2]
ena
bevat maar één element, dan krijg je een lege lijst in plaats van een foutmelding. Soms zou je liever de error krijgen, dus je moet je ervan bewust zijn dat dit kan gebeuren.Relatie tot
slice()
objectDe slicing operator
[]
wordt in de bovenstaande code gebruikt met eenslice()
object door gebruik te maken van de:
notatie (die alleen geldig is binnen[]
), d.w.z.:is gelijk aan:
Slice objecten gedragen zich ook iets anders afhankelijk van het aantal argumenten, net als bij
range()
, d.w.z. zowelslice(stop)
alsslice(start, stop[, step])
worden ondersteund. Om het specificeren van een bepaald argument over te slaan, kan menNone
gebruiken, zodat bijvoorbeelda[start:]
gelijk is aana[slice(start, None)]
ofa[::-1]
gelijk is aana[slice(None, None, -1)]
.Hoewel de
:
-gebaseerde notatie erg handig is voor eenvoudige slicing, vereenvoudigt het expliciete gebruik vanslice()
objecten de programmatische generatie van slicing.De Python tutorial heeft het erover (scroll een beetje naar beneden tot je bij het gedeelte over slicen komt).
Het ASCII art diagram is ook nuttig om te onthouden hoe slices werken:
Een opsomming van de mogelijkheden die door de grammatica worden toegestaan:
Natuurlijk, als
(hoog-laag)%stride != 0
, dan zal het eindpunt iets lager liggen danhoog-1
.Als
stride
negatief is, wordt de volgorde een beetje veranderd omdat we'naar beneden tellen:Uitgebreide slicing (met komma's en ellipsen) worden meestal alleen gebruikt door speciale datastructuren (zoals NumPy); de basisreeksen ondersteunen ze niet.