Geschiedenis van de vraag: Slices (slicing) zijn van het begin af aan in Python aanwezig als een syntactisch handige manier om fragmenten van sequenties te verkrijgen zonder handmatige iteratie met lussen.
Probleem: Programmeurs die van andere talen komen, gebruiken vaak expliciete lussen om met sublijsten te werken. Dit verhoogt de hoeveelheid en verlaagt de prestaties van de code.
Oplossing: List slicing stelt je in staat om delen van een lijst, string of andere sequenties compact, duidelijk en efficiënt te verkrijgen. Slices modificeren het oorspronkelijke object niet, maar geven een kopie of view terug (voor sommige types).
Voorbeeldcode:
lst = [0, 1, 2, 3, 4, 5] sub = lst[1:4] # [1, 2, 3] reverse = lst[::-1] # [5, 4, 3, 2, 1, 0] every_second = lst[::2] # [0, 2, 4]
Kern kenmerken:
Heeft het wijzigen van een waarde in een slice invloed op de oorspronkelijke lijst?
Nee: wanneer je een nieuwe lijst aan een slice toewijst, wijzig je de oorspronkelijke lijst op die posities; maar bij het nemen van een slice krijg je een nieuwe lijst.
Voorbeeld:
lst = [1, 2, 3, 4] lst2 = lst[1:3] # [2, 3] lst2[0] = 20 # Beïnvloedt lst niet: lst2 is een nieuw object
Echter:
lst[1:3] = [7, 8] # dit wijzigt lst rechtstreeks
Hoe werkt slicing met negatieve indexwaarden?
Negatieve indices worden vanaf het einde geteld: -1 is het laatste element, -2 is het op één na laatste. Bijvoorbeeld, lst[:-1] betekent alle elementen behalve de laatste.
Wat gebeurt er als je buiten de grenzen van de lijst probeert te slicen?
Python behandelt dergelijke gevallen "intelligent": er zal geen fout zijn, de slice wordt gewoon beperkt tot beschikbare grenzen. Bijvoorbeeld, lst[100:200] zal een lege lijst of de maximaal mogelijke sublijst geven.
Het verwerken van de lijst kost honderden regels met geneste lussen en voorwaardes voor het "snijden" van invoerdata, de code is ingewikkeld en traag.
Voordelen:
Nadelen:
Dezelfde code is herschreven met behulp van slicing en ingebouwde functies, kost minder regels, is gemakkelijk te testen.
Voordelen:
Nadelen: