Lijsten

Zie boek “De Programmeursleerling” hoofdstuk 12 pagina 153.

We zagen eerder de eenvoudige datatypes integer, float en boolean. Python maakt echter ook complexere datatypes beschikbaar. Een hiervan, de lijst, maakt het mogelijk om verzamelingen van data bij te houden.

Aanmaken

Een lijst aanmaken doe je in Python met:

temperaturen_deze_week = [9, 9, 10, 10, 9, 7, 5]

Of:

games = ['Among Us', 'Fortnite', 'Terraria']

Je mag een lijst ook op meerdere regels weergeven:

leerlingen = [
    'Coen',
    'Ibe',
    'Jelle',
    'Marnick',
    'Mike',
    'Nick',
    'Seppe',
    'Simon',
]

Opgave 38

Schrijf een Python programma waarin je een lijst aanmaakt met je favoriete games, en deze op het scherm afdrukt.

Lengte van een lijst

Met de functie len() kan je het aantal elementen in een lijst opvragen:

print(len(leerlingen))
# toont 8

Opgave 39

Pas je code uit opgave 38 aan zodat je het aantal games in je lijst afdrukt.

Indexeren

Om iets te doen met een bepaald element in een lijst kan je de variabele naam laten volgen door vierkante haakjes, en daartussen een integer die aangeeft welk element je wil gebruiken. Om bijvoorbeeld het eerste element van een lijst af te drukken:

letters = ['a', 'b', 'c']
print(letters[0])

Dit getal tussen de haakjes noemt men de “index”. Je kan ook een negatieve index gebruiken: -1 als index geeft het laatste element van de lijst aan, -2 het voorlaatste enzovoort.

series = [
    'Vikings',
    'Breaking Bad',
    'The Flash',
    'Arrow',
]
print(series[0])
# Toont: Vikings
print(series[3])
# Toont: Arrow
print(series[-1])
# Toont: Arrow
print(series[-2])
# Toont: The Flash

Opgave 40

Pas je code uit opgave 39 aan zodat je enkel het tweede en het voorlaatste spel uit je lijst op het scherm toont.

For-loop en lijsten

Met behulp van een for-loop kan je iets doen met ieder element van een lijst:

for game in games:
    print(game)

Opgave 41

Pas je code uit opgave 40 aan zodat je voor ieder spel volgende regel op het scherm print:

Ik speel graag Minecraft
Ik speel graag Terraria
Ik speel graag Mario Kart

Berekeningen uitvoeren

Zo kan je via een for-loop ook een berekening uitvoeren, zoals het totale aantal views berekenen als je een lijst met dagelijks aantal views van je site beschikbaar hebt:

views_per_dag = [52, 105, 122, 1051, 0, 324, 748]
som = 0
for views in views_per_dag:
    som = som + views
print("Het totale aantal views is", som)
# Toont: Het totale aantal views is 2402

Of het gemiddelde van je punten uitrekenen:

rapport = [5, 8, 9, 3, 9.5, 7, 6]
som = 0
for punt in rapport:
    som = som + punt
print("Mijn gemiddelde is:", som / len(rapport))
# Toont: Mijn gemiddelde is: 6.785714285714286

Opgave 42

Schrijf een Python-programma dat het totale aantal besmettingen berekent met behulp van een for-loop, gebruikmakend van onderstaande lijst van besmettingen per land:

besmettingen = [
    1556730, # Spanje
    1408868, # Italie
    932111, # Duitsland
    861331, # Polen
    558779, # Belgie
    484648, # Nederland
    290601, # Zwitserland
    249099, # Oostenrijk
    208295, # Zweden,
    91619, # Griekenland
    70461, # Ierland
    70485, # Denemarken
    32761, # Albanie
    32352, # Noorwegen
    30333, # Luxemburg
    21216, # Finland
]

Opgave 43

Pas het programma uit opgave 42 aan, zodat je ook het gemiddelde aantal besmettingen berekent.

Toevoegen

Na het aanmaken van een lijst, kan je ze ook nog aanpassen. Zo kan je elementen achteraan aan je lijst toevoegen met behulp van de functie append():

videokaarten = [
    "RX 6900 XT",
    "RX 6800 XT",
    "RX 6800",
]
videokaarten.append("RX 6700 XT")
videokaarten.append("RX 6700")
print(videokaarten)
# toont ['RX 6900 XT', 'RX 6800 XT', 'RX 6800', 'RX 6700 XT', 'RX 6700']

Je kan ook elementen toevoegen op een andere plaats in met behulp van de functie insert():

videokaarten = [
    "RTX 3090",
    "RTX 3070",
]
videokaarten.insert(1, "RTX 3080")
print(videokaarten)
# toont ['RTX 3090', 'RTX 3080', 'RTX 3070']

Opgave 44

Pas het programma uit opgave 43 aan, zodat je het aantal besmettingen in Slovakije (96241) achteraan de lijst toevoegt met behulp van append():

Lijst uitbreiden met andere lijst

Je kan een lijst ook uitbreiden aan de hand van een andere lijst:

games = ["AC Valhalla", "FIFA 21", "The Last of Us Part II"]
games_2021 = ["Hitman 3", "Super Mario 3D World", "Yakuza: Like a Dragon"]
games.extend(games_2021)
print(len(games))
# Toont: 6

Opgave 45

Pas het programma uit opgave 44 aan, zodat je volgende landen aan de lijst toevoegt met behulp van extend():

extra_landen = [
    418645, # Roemenie
    121820, # Bulgarije
    177952, # Hongarije
    1041875, # Mexico
]

Elementen verwijderen uit een lijst

Je kan verder elementen verwijderen uit een lijst:

games = ["Far Cry 6", "Dirt 5", "Everspace 2"]
games.remove("Dirt 5")
print(games)
# Toont: ['Far Cry 6', 'Everspace 2']

Opgave 46

Pas het programma uit opgave 45 aan, zodat je Mexico verwijdert met behulp van remove().

Slicing

Je kan ook een aantal elementen uit een lijst selecteren:

books = [
    "The Last Kingdom",
    "The Pale Horseman",
    "The Lords of the North",
    "Sword Song",
    "The Burning Land",
    "Death of Kings",
    "The Pagan Lord",
    "The Empty Throne",
]
print(books[:2])
# Toont: ['The Last Kingdom', 'The Pale Horseman']
print(books[2:4])
# Toont: ['The Lords of the North', 'Sword Song']
print(books[7:])
# Toont: ['The Empty Throne']

Opgave 47

Pas het programma uit opgave 46 aan, zodat je de eerste drie elementen uit de lijst afdrukt met behulp van “slicing”.

Complexere lijsten

In de vorige voorbeelden lieten we telkens lijsten zien die eenvoudige datatypes bevatten. Lijsten mogen echter ook complexere datatypes bevatten, zoals b.v. lijsten. Dit noemt men een “nested list”. Dus, je mag een lijst van lijsten maken, zoals in onderstaande lijst van spellen, die telkens de naam en de MetaCritic score bevat:

ac_games = [
    ["Valhalla", 85],
    ["Odyssey", 86],
    ["Origins", 84],
]

Opgave 48

Vul onderstaand programma aan zodat de lijst de coördinaten van iedere kogel op de tekening bevat:

bullets = [
    [100, 100],
]
_images/coordinates_bullets.svg

Opgave 49

Pas de code uit opgave 48 aan, zodat je volgende coördinaten met behulp van append() achteraan de lijst toevoegt:

  • [120, 30]

  • [200, 105]

Opgave 50

Pas de code uit opgave 49 aan, zodat je de kogel op coördinaat [100, 100] verwijdert met behulp van remove().

Opgave 51

Pas de code uit opgave 50 aan, zodat je met een for-loop de coördinaten van iedere kogel afdrukt.

Indexeren van nested lists

Net zoals bij de eenvoudigere lijsten, kan je ook bij nested lists elementen gebruiken door middel van de vierkante haakjes. Dus als je het eerste element uit een lijst wenst te gebruiken, gebruik je ac_games[0], voor het tweede element gebruik je ac_games[1]:

ac_games = [
    ["Valhalla", 85],
    ["Odyssey", 86],
    ["Origins", 84],
]
print(ac_games[1])
# Toont: ["Odyssey", 86]

Je kan ook rechtstreeks aan de elementen van de sublijst geraken door tweemaal na elkaar de vierkante haakjes te gebruiken:

print(ac_games[1][0])
# Toont: Odyssey

Een uitgebreider voorbeeld:

ac_games = [
    ["Valhalla", 85],
    ["Odyssey", 86],
    ["Origins", 84],
    ["Syndicate", 74],
    ["Black Flag", 84],
    ["Unity", 70],
]
print(ac_games[1])
# Toont ["Odyssey", 86]
print(ac_games[1][0])
# Toont Odyssey
print(ac_games[1][1])
# Toont 86

Een tweede voorbeeld waarbij we een lijst zien die coördinaten van kogels voorstelt:

bullets = [
    [0, 0],
    [103, 51],
    [40, 53],
    [58, 230],
]
print(bullets[1])
# Toont [103, 51]
print(bullets[1][0])
# Toont 103
print(bullets[1][1])
# Toont 51

Opgave 52

Pas de code uit opgave 51 aan, zodat je de coördinaten van de eerste kogel afdrukt.

Opgave 53

Pas de code uit opgave 52 aan, zodat je enkel het x-coördinaat van de eerste kogel afdrukt.

Opgave 54

Pas de code uit opgave 53 aan, zodat je enkel de y-coördinaten van iedere kogel afdrukt.

Opgave 55

We zagen hoe je een element uit een lijst kon gebruiken door middel van de vierkante haken (indexeren). We gebruikten dit voorlopig enkel om elementen af te drukken, dus we lazen voorlopig enkel de waarde.

We kunnen elementen van een lijst echter ook rechtstreeks aanpassen doormiddel van deze indexatie:

temperaturen = [9, 9, 10, 10, 8, 7, 5]
temperaturen[1] = 100
print(temperaturen)
# Toont: 9, 100, 10, 10, 8, 7, 5

Pas bovenstaande code aan zodat het eerste element de waarde 200 krijgt, en het laatste element de waarde 500.

Opgave 56

In opgave 55 zagen we dat je lijsten ook kan aanpassen door middel van indexatie. Ook voor geneste lijsten werkt dit:

bullets = [
    [0, 100],
    [200, 100],
]
bullets[0][0] = 8
print(bullets)
# Toont: [[8, 100], [200, 100]]

Pas de bovenstaande code aan zodat de y-coördinaat van de tweede kogel 104 wordt, gebruik makend van indexatie.