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 :func:`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. .. literalinclude:: ex/list_indexing1.py 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: .. literalinclude:: ex/list_sum.py Of het gemiddelde van je punten uitrekenen: .. literalinclude:: ex/list_avg.py 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 :func:`append`: .. literalinclude:: ex/listappend.py Je kan ook elementen toevoegen op een andere plaats in met behulp van de functie :func:`insert`: .. literalinclude:: ex/listinsert.py Opgave 44 --------- Pas het programma uit opgave 43 aan, zodat je het aantal besmettingen in Slovakije (96241) achteraan de lijst toevoegt met behulp van :func:`append`: Lijst uitbreiden met andere lijst --------------------------------- Je kan een lijst ook uitbreiden aan de hand van een andere lijst: .. literalinclude:: ex/list_extend.py Opgave 45 --------- Pas het programma uit opgave 44 aan, zodat je volgende landen aan de lijst toevoegt met behulp van :func:`extend`:: extra_landen = [ 418645, # Roemenie 121820, # Bulgarije 177952, # Hongarije 1041875, # Mexico ] Elementen verwijderen uit een lijst ----------------------------------- Je kan verder elementen verwijderen uit een lijst: .. literalinclude:: ex/list_remove.py Opgave 46 --------- Pas het programma uit opgave 45 aan, zodat je Mexico verwijdert met behulp van :func:`remove`. Slicing ------- Je kan ook een aantal elementen uit een lijst selecteren: .. literalinclude:: ex/list_slicing1.py 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], ] .. image:: images/coordinates_bullets.svg Opgave 49 --------- Pas de code uit opgave 48 aan, zodat je volgende coördinaten met behulp van :func:`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 :func:`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: .. literalinclude:: ex/list_in_list1.py Een tweede voorbeeld waarbij we een lijst zien die coördinaten van kogels voorstelt: .. literalinclude:: ex/list_in_list2.py 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.