Lijsten ======= Zie boek "Leren programmeren met Python" hoofdstuk 7 pagina 36. 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 27 --------- 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 28 --------- Pas je code uit opgave 27 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 29 --------- Pas je code uit opgave 28 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 30 --------- Pas je code uit opgave 29 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 31 --------- 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 32 --------- Pas het programma uit opgave 31 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 33 --------- Pas het programma uit opgave 32 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 34 --------- Pas het programma uit opgave 33 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 35 --------- Pas het programma uit opgave 34 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 36 --------- Pas het programma uit opgave 35 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 37 --------- 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 38 --------- Pas de code uit opgave 37 aan, zodat je volgende coördinaten met behulp van :func:`append()` achteraan de lijst toevoegt: - [120, 30] - [200, 105] Opgave 39 --------- Pas de code uit opgave 38 aan, zodat je de kogel op coördinaat [100, 100] verwijdert met behulp van :func:`remove()`. Opgave 40 --------- Pas de code uit opgave 39 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 41 --------- Pas de code uit opgave 40 aan, zodat je de coördinaten van de eerste kogel afdrukt. Opgave 42 --------- Pas de code uit opgave 41 aan, zodat je enkel het x-coördinaat van de eerste kogel afdrukt. Opgave 43 --------- Pas de code uit opgave 42 aan, zodat je enkel de y-coördinaten van iedere kogel afdrukt. Opgave 44 --------- 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 45 --------- In opgave 44 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.