← Terug naar overzicht
Basisconcepten · Python

List slicing

Een deel van een sequentie selecteren met [start:stop:step]

Nu we weten hoe for door een sequentie itereert, is dit een logisch moment om te kijken hoe je een deel van zo'n sequentie kunt selecteren, zonder een loop te schrijven. Dit heet slicing en werkt op list, tuple en str.

4.1 Basissyntax

Elk element in een sequentie heeft een index, beginnend bij 0:

letters = ["a", "b", "c", "d", "e"]
#            0    1    2    3    4

Een slice pak je met sequentie[start:stop]. start is inclusief, stop is exclusief (het element op index stop zit er dus niet bij):

letters = ["a", "b", "c", "d", "e"]

print(letters[1:3])    # ['b', 'c']
print(letters[0:2])    # ['a', 'b']
print(letters[2:5])    # ['c', 'd', 'e']

4.2 Start of stop weglaten

Laat je start weg, dan begint de slice bij het begin. Laat je stop weg, dan loopt de slice door tot het einde:

letters = ["a", "b", "c", "d", "e"]

print(letters[:3])     # ['a', 'b', 'c']   vanaf het begin tot index 3
print(letters[2:])     # ['c', 'd', 'e']   vanaf index 2 tot het einde
print(letters[:])      # ['a', 'b', 'c', 'd', 'e']   een kopie van de hele lijst

4.3 Negatieve indices

Een negatieve index telt vanaf het einde: -1 is het laatste element, -2 het een-na-laatste, enzovoort.

letters = ["a", "b", "c", "d", "e"]

print(letters[-1])     # 'e'
print(letters[-2])     # 'd'
print(letters[:-1])    # ['a', 'b', 'c', 'd']   alles behalve het laatste element
print(letters[-3:])    # ['c', 'd', 'e']         de laatste 3 elementen

4.4 De derde waarde: step

Met sequentie[start:stop:step] bepaal je ook de stapgrootte. Een step van 2 pakt bijvoorbeeld om het element een:

getallen = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(getallen[::2])       # [0, 2, 4, 6, 8]     elk tweede element
print(getallen[1::2])      # [1, 3, 5, 7, 9]     elk tweede element, vanaf index 1
print(getallen[::-1])      # [9, 8, 7, ..., 0]   de hele lijst omgekeerd

Veelgebruikt patroon: lijst[::-1] is de meest gebruikte manier om een lijst (of string) om te draaien.

4.5 Slicing werkt ook op strings

tekst = "Python"

print(tekst[0:2])      # 'Py'
print(tekst[-3:])      # 'hon'
print(tekst[::-1])     # 'nohtyP'

4.6 Out-of-range: geen IndexError

Bij directe indexering (letters[10]) krijg je een IndexError als de index niet bestaat. Bij slicing gebeurt dat niet: Python knipt gewoon af bij wat er beschikbaar is.

letters = ["a", "b", "c"]

# print(letters[10])     # FOUT! IndexError
print(letters[1:10])     # ['b', 'c']   geen fout, gewoon tot het einde
print(letters[10:20])    # []           lege lijst, geen fout