Strings#

Tekstuele data en collecties

Verzamelingen van data zijn heel natuurlijk, denk bijvoorbeeld aan een reeksen van dagelijkse temperaturen (het werk van het KNMI) of verkoopcijfers van een winkel om bijvoorbeeld de maand- of jaaromzet te kunnen berekenen. De volgorde maakt in al deze gevallen uit: het heeft betekenis. Tekst (wat je nu leest) is een opeenvolging van karakters en het datatype om tekstuele data te representeren is een string. Vergelijk het met een draad waar je individuele karakters aan vast rijgt.

character string

Een computer herkent een string aan dubbele of enkele quotes, zolang je maar consequent bent, bijvoorbeeld "hoi' zal een syntaxfout geven!

a = "123"
b = 123

In bovenstaande voorbeeld is variabele a een string en variabele b een integer. Om te checken welke type een variabele is kan de functie type() gebruikt worden

strings: tekstuele data#

Voorbeeld

strings

s = "hanze", c = "hogeschool"

type

type(s)

lengte

len(s)

optellen

s + c

vermenigvuldigen

2*s + 3*c

type("hanzehogeschool")
str

Je zult zien dat je bijzonder veel met strings kan doen, van bij elkaar optellen tot vermenigvuldigen!

Gegeven de volgende twee strings

s1 = "ha"
s2 = "k"

Strings optellen …

s1 = "ha"
s2 = "k"

print(s1 + s2)
hak

Strings vermenigvuldigen …

s1 = "ha"
s2 = "k"

print(2*s1 + s2 + 2*(s1 + s2))
hahakhakhak

Opdracht 1: Wat is de output ?

a.

a = "123"
print(2 * a)

b.

a = "hanze"
b = "Hogeschool"
print(2 * a + b)

c.

a = 123
b = "456"
print(a, b)

Lists#

Verzamelingen van data.

M = [4, 7, 100, 42, 5, 47]

Net als bij strings (draden?) gebruiken we ook hier de Engelse term lists (en niet lijsten). Je ziet hier een lijst met 6 elementen die aan de variabele M wordt toegekend. Met de vierkante haken geef je Python aan dat je hier een list bedoelt, elementen in de lijst scheid je met komma’s.

Lengte#

De lengte van een lijst

M = [4, 7, 100, 42, 5, 47]

len(M)
6

Een list is een sequentie en net als bij een string kan je de lengte (het aantal elementen) opvragen met len(x).

Index#

De elementen in de lijst zijn geĂŻndexeerd, ze hebben een vaste positie.

0

1

2

3

4

5

[

4,

7,

100,

42,

5,

47

]

In een sequentie staat elk element op een vaste positie en we beginnen altijd te tellen vanaf 0.

Positie#

Het element op index positie 0 opvragen

M = [4, 7, 100, 42, 5, 47]

M[0]
4

De syntax lijkt wat eigenaardig omdat je hier wéér vierkante haken moet gebruiken, deze keer achter de varabele naam om het karakter op deze positie op te vragen.

Slicing#

Een opeenvolgende selectie van elementen opvragen

M = [4, 7, 100, 42, 5, 47]

M[0:3]
[4, 7, 100]

Slicing, alsof je een puntje uit een taart snijdt! De eerste positie is de start index (0), de tweede de stop index (3). Stop is tot de index (en niet tot en met). Slicing geeft als resultaat altijd hetzelfde type terug (een list in dit geval). We zullen straks zien dat je ook strings kan slicen en dan zal het een substring teruggeven.

Alle data#

Een list kan alle datatypen bevatten

L = [3.14, [2, 40], 'derde', 42]

Let hier even op, je ziet hier een een lijst als element op index positie 1 en een string op positie 2. Een lijst in een lijst, wat zal len(x) nu tellen?

L = [3.14, [2, 40], 'derde', 42]

len(L)
4

Alleen de elementen van de lijst zelf worden geteld!

Strings en indexering#

String indexering met []

0

1

2

3

4

h

a

n

z

e

Goed nieuws! Net als lists zijn strings geĂŻndexeerd en ook hier begint tellen bij 0!

Positie#

Het karakter op index positie 0 opvragen

s = 'hanze'

s[0]
'h'

Exact detzelfde syntax en werking als bij lists!

Negatieve indices#

Negatieve indicess tellen van achteren naar voren!

0

1

2

3

4

h

a

n

z

e

-5

-4

-3

-2

-1

s = 'hanze'

s[-5]
'h'

Negatieve indices introduceren we nu voor strings, maar je kan misschien al raden dat dit op dezelfde manier ook bij lists werkt!

Slicing#

Een substring opvragen:

s = "hanzehogeschool"

s[0:5]
'hanze'
s = "hanzehogeschool"

s[5:]
'hogeschool'

Het is je misschien opgevallen dat je de “stop” positie leeg kan laten, Python neemt dan aan dat je tot en met het einde van de sequentie (de string in dit geval) bedoelt. Wat zou gebeuren als we de “start” positie ook leeg laten?

s = "hanzehogeschool"

s[:]
'hanzehogeschool'

De substring is in dit geval de hele string! Python vult voor jou het begin en einde in op bais van de lengte van de string. Bedenk dat dit een kopie van de string is, denk hier terug aan geheugenadressen: de waarden zijn hetzelfde, maar de identiteit is anders. Probeer dit zelf en vergelijk id(s) met id(s[:]).

Stappen#

Met hoeveel stappen door de sequentie lopen (skip-slicing)

[start:stop:step]

Standaard is de stap 1, dat wil zeggen, neem steeds 1 stap voor het volgend element dat we in de selectie zouden willen hebben.

s = 'hanzehogeschool'

s[::1]
'hanzehogeschool'

Twee stappen per keer:

s = 'hanzehogeschool'

s[::2]
'hneoecol'

Achteruit lopen#

Stappen kunnen ook negatief zijn!

s = 'hanzehogeschool'

s[::-1]
'loohcsegoheznah'

Als je goed oplet zie je dat we met een negatieve stap de string hebben omgedraaid! Python gebruikers willen graag opscheppen met deze “truc” om een string om te draaien en misschien hebben ze wel gelijk!

Let op

Bij een negatieve staprichting moet de start- en stopindex omgekeerd zijn!

s = 'hanzehogeschool'

s[14:8:-1]
'loohcs'

Omdat de staprichting wijzigt, wijzigt ook op welke index moet worden begonnen en tot welke index moet worden gelopen.

Opdracht 2

pi = [3, 1, 4, 1, 5, 9]

L = ['pi', "isn't", [4,2]]
  1. Wat is len(pi)?

  2. Wat is len(L)?

  3. Wat is len(L[1])?

  4. Wat is pi[2:4]?

  5. Welk puntje (“slice”) pi is gelijk aan [3,1,4]? (hint, neem het aantal elementen als stop waarde)

  6. Welk puntje pi is [3,4,5]?

Opdracht 3

L = ['pi', "isn't", [4,2]]

M = 'You need parentheses for chemistry !'
#    0   4   8   12  16  20  24  28  32
  1. Wat is L[0]?

  2. Wat is L[0][1]?

  3. Wat is L[0:1]?

  4. Wat is M[9:15]?

  5. Wat is M[::5]?

  6. Welk puntje M is 'try'?

  7. Welk puntje M is 'shoe'?

Opdracht 4

pi = [3, 1, 4, 1, 5, 9]
  1. Wat is pi[0] * (pi[1] + pi[2])?

  2. Wat is pi[0] * (pi[1:2] + pi[2:3])?

  3. Hoe krijg je [3,4,5,3,4,5,3,4,5]?

max of min#

De niet subtiele kunst van het uitzoeken van het beste (en slechtste) van alles: > of <

"m&m's" > "koffie"
True
[0, 42] < [4, 2]
True
[0, "m&m's"] < [4, "koffie"]
True

strings to the max#

Zowel bij Strings als bij lists kiest Python het eerste element voor vergelijkingen. Zijn deze aan elkaar gelijk, dan vergelijkt python de volgende twee elementen. Een leeg element is altijd kleiner.

"w" > "e"
True

IntuĂŻtief zou je denken dat dit een vergelijking is op basis van de positie in het alfabet. Hoe verder in het alfabet, hoe hoger de waarde van de letter.

"Emily" > "Misja"
False

M ligt verder in het alfabet dan E en dus is de statement false.

"Mug" > "Muis"
False

De eerste letters (M) zijn gelijk aan elkaar, er wordt dan gekeken naar de twee letters.
De tweede letters (u) zijn ook gelijk aan elkaar, er wordt dan gekeken naar de derde letters De derde letters zijn niet gelijk aan elkaar. i ligt verder in het alfebet dan g en dus is de statement false.

Opdracht 5 True or false?

a. [4,2] > [42]
b. "hoi" > "doei"
c. "eten" > "werken"
d. "Haard" < "Huis"
e. "F" < "Fiets"
f. [4, "m&m's"] < [1, "koffie"]