Je kunt de individuele tekens van een string middels indices benaderen. Ieder teken in een string heeft een positie, en die positie kun je weergeven door het index nummer van de positie. De indices beginnen bij 0 en lopen op tot aan de lengte van de string. Hieronder zie je het woord “python” op de eerste regel, met op de tweede en derde regel indices voor ieder teken in deze string:
P | Y | T | H | O | N |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 |
-6 | -5 | -4 | -3 | -2 | -1 |
Zoals je kunt zien, kun je positieve indices gebruiken die beginnen met 0 bij de eerste letter van de string, en die oplopen tot het einde van de string. Je kunt ook negatieve indices gebruiken, die starten met -1 bij de laatste letter van de string, en die aflopen totdat de eerste letter van de string bereikt is.
De lengte van een string s
kun je berekenen met len(s)
; de laatste letter van de string heeft dus index len(s)-1
. Met negatieve indices heeft de eerste letter van de string de index -len(s)
.
ls een string is opgeslagen in een variabele, dan kun je de individuele letters van de string benaderen via de variabele naam en de index van de gevraagde letter tussen vierkante haken ([]) rechts ernaast.
fruit = "aardbei"
print( fruit[4] )
print( fruit[2] )
print( fruit[1] )
print( fruit[-4] )
print( fruit[-2] )
print( fruit[-5] )
print( fruit[-1] )
print( fruit[5] )
Naast enkele indices om letters in een string te benaderen, kun je ook substrings van een string benaderen door twee getallen tussen vierkante haken te zetten met een dubbele punt (:) ertussen. De eerste van deze getallen is de index waar de substring start, de tweede waar de substring eindigt. De substring is exclusief de letter die hoort bij de tweede index. Door het linkergetal weg te laten geef je aan dat de substring begint bij de start van de string (dus bij index 0). Door het rechtergetal weg te laten geef je aan dat de substring eindigt met het laatste teken van de string (inclusief dit laatste teken).
Als je probeert een teken van een string te benaderen met een index die buiten de string valt, krijg je een runtime error (“index out of range”). Als je een substring probeert te benaderen geldt die beperking niet; het is toegestaan om getallen te gebruiken die buiten het bereik van de string vallen.
fruit = "aalbes"
print( fruit[:] )
print( fruit[0:] )
print( fruit[:6] )
print( fruit[:100] )
print( fruit[:len( fruit )] )
print( fruit[1: -1] )
print( fruit[2], fruit[1:6] )
Substrings kunnen behalve een index voor begin en einde een derde argument krijgen, namelijk stapgrootte. Dit argument werkt equivalent aan het derde argument voor de range()
functie. De syntax voor substrings is <string>[<begin>:<einde>:<stap>]
. Indien niet opgegeven (default), is de stapgrootte 1.
Een veelgebruikte toepassing van de stapgrootte is het gebruik van een negatieve waarde om de string te inverteren.
fruit = "banaan"
print( fruit[::2] )
print( fruit[1::2] )
print( fruit[:: -1] )
print( fruit[:: -2] )
Een kerneigenschap van strings is dat ze onveranderbaar (Engels: immutable) zijn. Dit betekent dat strings niet kunnen wijzigen. Bijvoorbeeld, je kunt niet een teken in een string wijzigen door er een nieuwe waarde aan toe te kennen. Ter demonstratie: de volgende code leidt tot een runtime error als je hem probeert uit te voeren:
fruit = "aaldbei"
fruit[2] = "r" # Runtime error!
print( fruit )
Als je een wijziging wilt maken in een string, moet je een nieuwe string maken die de wijziging omvat; je kunt daarna de nieuwe string toekennen aan de bestaande variabele als je wilt. Bijvoorbeeld:
fruit = "aaldbei"
fruit = fruit[:2] + "r" + fruit[3:]
print( fruit )
De reden waarom strings onveranderbaar zijn, is te technisch om hier te bespreken. Onthoud alleen dat als je een string wilt wijzigen, je geen nieuwe waarde kunt toekennen aan een individueel teken uit de string. In plaats daarvan moet je de variabele die de string bevat geheel overschrijven.
ord
en char
Onderzoek zelf met behulp van H10.7 in het boek.