Hoofdstuk 3 - Introductie van Lijsten

01 - Wat is een lijst?
  • Een lijst is een verzameling items in een bepaalde volgorde
  • Items in een lijst hoeven niet op een bepaalde manier gerelateerd te zijn
  • De lijst wordt toegewezen aan een variabele
  • Omdat een lijst meestal meer dan één item bevat is de naam van de variabele vaak ook in meervoud
cars = ['Land Rover','BMW','Honda','Mercedes','Audi']
print(cars)
['Land Rover', 'BMW', 'Honda', 'Mercedes', 'Audi']

items = ['Pasta', 21, "gras", 18-6, 'Honda ' + 'Max',['Mercedes','Ferrari']]
print(items)
['Pasta', 21, 'gras', 12, 'Honda Max', ['Mercedes', 'Ferrari']]

In andere programmeertalen is een lijst ook bekend onder de naam dynamic array.

  • Lijsten worden gebruikt in praktisch elke applicatie: bij het maken van spellen, het ophalen van gegevens uit een database, het verwerken van data via een API of het realtime aanpassen van grafieken op een website.
02 - Items in een lijst benaderen
  • Lijsten zijn geordende verzamelingen
  • Elk item heeft een indexwaarde waarmee je het kan aanspreken
  • Om een item te benaderen vermeld je de variabelenaam van de lijst + het indexnummer
  • Indexnummers van de lijst plaats je tussen brackets [ ]
cars = ['Land Rover','BMW','Honda','Mercedes','Audi']
print(cars[0])
Land Rover

Als we slechts één item uit de lijst vragen, geeft Python het weer zonder brackets


  • Als een lijst een string bevat kun je daar string-methoden op toepassen
cars = ['Land Rover','BMW','Honda','Mercedes','Audi']
print(cars[3].upper())
MERCEDES

  • Het eerste item in een lijst heeft altijd indexwaarde 0
  • Het laatste item in een lijst heeft altijd indexwaarde -1 (het één na laatste item is -2, enz.)
cars = ['Land Rover','BMW','Honda','Mercedes','Audi']
print("Een " + cars[-1].title() + " is in Duitsland veel goedkoper!")
Een Audi is in Duitsland veel goedkoper!

Een bereik selecteren uit een lijst
  • Je kunt ook een bereik selecteren uit een lijst door de start- en eind-positie op te geven
  • Tussen de start- en eind-positie staat een dubbele punt
  • De start positie is inclusief het item
  • De eind positie is exclusief het item
cars = ['Land Rover', 'BMW', 'Ferrari' ,'Aston Martin', 'McLaren', 'Honda', 'Mercedes', 'Audi']
expensive_cars = cars[2:-3]
print(expensive_cars)
['Ferrari', 'Aston Martin', 'McLaren']

Meer voorbeelden in het volgende hoofdstuk

03 - Items Wijzigen
  • Lijsten worden veel gebruikt en zijn doorgaans dynamisch
  • Dynamisch wil zeggen dat er items worden toegevoegd, gewijzigd of verwijderd
  • Het wijzigen van een item in een lijst heeft een vergelijkbare syntax voor het benaderen van een item
  • Om een item te wijzigen gebruik je de variabelenaam van de lijst + het indexnummer
cars = ['Land Rover','BMW','Honda','Mercedes','Audi']
print(cars[0])
Land Rover

cars = ['Land Rover','BMW','Honda','Mercedes','Audi']
cars[0] = 'Lamborghini'
print(cars)
['Lamborghini', 'BMW', 'Honda', 'Mercedes', 'Audi']

04 - Items Toevoegen
  • Het meest eenvoudig om items aan een lijst toe te voegen is met de .append( )-methode
  • Met de .append( )-methode wordt een item aan het einde van een lijst toegevoegd
cars = ['Lamborghini','BMW','Honda','Mercedes','Audi']
cars.append('Spyker')
print(cars)
['Lamborghini', 'BMW', 'Honda', 'Mercedes', 'Audi', 'Spyker']

  • Het is goed mogelijk om in een programma te beginnen met een lege lijst en deze gaandeweg te vullen
motors = []
motors.append('Yamaha')
motors.append('Aprilia')
motors.append('KTM')
print(motors)
['Yamaha', 'Aprilia', 'KTM']

  • Om een item in het midden van de lijst toe te voegen kan de .insert( )-methode worden gebruikt
  • Bij gebruik van de .insert( )-methode is het nodig om de indexpositie mee te geven
motors = []
motors.append('Yamaha')
motors.append('Aprilia')
motors.append('KTM')
motors.insert(1, 'Honda')
print(motors)
['Yamaha', 'Honda', 'Aprilia', 'KTM']
05 - Items Verwijderen
  • Je kunt een item uit een lijst verwijderen op basis van zijn positie of op basis van zijn waarde
  • Een item verwijderen op basis van een indexnummer kan met een del statement
  • Een verwijderd item met een del statement kan niet meer gebruikt worden
motors = ['Yamaha','Aprilia','KTM','Honda']
del motors[2]
print(motors)
['Yamaha', 'Aprilia', 'Honda']

  • De .pop( )-methode verwijdert het laatste item uit een lijst, maar je kunt na het verwijderen nog met het item aan de slag
  • De laatste waarde die je uit een lijst verwijdert met .pop( ) kan worden opgeslagen in een variabele
motors = ['Yamaha','Aprilia','KTM','Honda']
last_item = motors.pop()
print(motors)
print(last_item)
['Yamaha', 'Aprilia', 'KTM']
Honda

  • Met de .pop( )-methode kan ook een specifiek item uit een lijst gehaald worden wanneer er ook een index wordt meegegeven
motors = ['Yamaha', 'Aprilia', 'KTM', 'Honda']
best_item = motors.pop(2)
print(motors)
print(best_item)
['Yamaha', 'Aprilia', 'Honda']
KTM

  • Een item verwijderen op basis van de letterlijke waarde kan met de methode .remove( )
motors = ['Yamaha','Aprilia','KTM','Honda']
print(motors)


expensive = 'Aprilia'
motors.remove(expensive)
print(expensive)


print(motors)
['Yamaha', 'Aprilia', 'KTM', 'Honda']
Aprilia
['Yamaha', 'KTM', 'Honda']

instructieEigenschapGebruikt index
delVerwijdert item uit lijst dat je niet meer nodig hebtJa
.pop( )Verwijdert item uit lijst dat je nog wilt gebruikenJa (hoeft niet)
.remove( )Verwijdert item uit lijst op basis van de letterlijke waardeNee

  • del gebruik je om iets te verwijderen uit een lijst - wat je niet meer nodig hebt
  • .pop( ) gebruik je om iets te verwijderen uit een lijst - en om de waarde verder nog wel te gebruiken
  • .pop( ) maakt gebruik van een indexnummer
  • Als je geen index opgeeft bij .pop( ), wordt het laatste item verwijderd
  • .remove( ) gebruik je om een item te verwijderen uit een lijst waarvan je de waarde weet
  • .remove( ) verwijdert het eerste gevonden item, zijn er meer met dezelfde waarde, gebruik dan een loop (hoofdstuk 7)
06 - Items Sorteren
  • Lijsten kunnen op verschillende manieren gesorteerd worden
  • Met de .sort( )-methode kun je een lijst alfabetisch sorteren
  • Bij het alfabetisch sorteren is er een onderscheid tussen kleine- en hoofd-letters
  • De .sort( )-methode verandert de lijst permanent, de oorspronkelijke situatie is niet meer beschikbaar
motors = ['Yamaha','Aprilia','KTM','Honda','buell','harley','kawasaki','234']
motors.sort()
print(motors)
['234', 'Aprilia', 'Honda', 'KTM', 'Yamaha', 'buell', 'harley', 'kawasaki']

  • Door een argument reverse=True aan de .sort( )-methode toe te voegen ontstaat de omgekeerde volgorde
  • De .sort( )-methode kan ook integers sorteren
  • Wanneer je strings en integers combineert in een lijst geeft de .sort( )-methode een foutmelding
numbers = [1,3,5,7,2]
numbers.sort(reverse=True)
print(numbers)
[7, 5, 3, 2, 1]

  • Om de oorspronkelijke sortering van de lijst te behouden kun je de .sorted( )-functie gebruiken
  • De .sorted( )-functie sorteert naar een nieuw resultaat en laat de originele lijst zoals hij is
numbers = [1,3,9,1,5,7,2]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
[1, 1, 2, 3, 5, 7, 9]

Kleine- & hoofd-letters gemixed sorteren
  • Python prioriteert hoofdletters bij de sort( )-methode
  • Om dit te voorkomen kun je het volgende argument gebruiken: key=str.lower
motors = ['Yamaha','Aprilia','KTM','Honda','buell','harley','kawasaki','234']
motors.sort(key=str.lower)
print(motors)
['234', 'Aprilia', 'buell', 'harley', 'Honda', 'kawasaki', 'KTM', 'Yamaha']

Een lijst in omgekeerde volgorde
  • De oorspronkelijke volgorde van een lijst omkeren kan met de .reverse( )-methode
  • Let op dat de .reverse( )-methode niet alfabetisch sorteert. Hij draait alleen de lijst om
  • De omkering is permanent. Wil je dat niet? Voer hem dan nog eens uit
motors = ['Yamaha','Aprilia','KTM','Honda','buell','harley','kawasaki','234']
motors.reverse()
print(motors)
['234', 'kawasaki', 'harley', 'buell', 'Honda', 'KTM', 'Aprilia', 'Yamaha']

07 - De items in een lijst tellen
  • De functie len( ) kan het aantal items in een lijst tellen
  • Python begint bij index 0 voor het eerste item, maar len(motors) geeft het aantal items (hier 8)
motors = ['Yamaha','Aprilia','KTM','Honda','buell','harley','kawasaki','234']
print(len(motors))
8

Oefening
Quiz

Vraag 1. Welke regel maakt een lijst met vijf automerken?




Juist. Een lijst herken je aan de [ ]-brackets.
Niet helemaal. Een echte Python-lijst wordt gemaakt met [ ], niet met alleen quotes of haakjes.

Vraag 2. Je hebt:

cars = ['Land Rover', 'BMW', 'Honda', 'Mercedes', 'Audi']

Welke expressies geven de string 'BMW' terug?




Klopt. cars[1] en cars[-4] verwijzen allebei naar 'BMW'.
Let op. Index 0 is het eerste item, -1 het laatste. 'BMW' staat op positie 1 (of -4).

Vraag 3. Wat print deze code?

cars = ['Land Rover', 'BMW', 'Honda', 'Mercedes', 'Audi']
print(cars[-1])



Goed! Met index -1 pak je altijd het laatste item.
Niet juist. Een negatieve index telt vanaf het einde: -1 is het laatste element van de lijst.

Vraag 4. Wat is de waarde van expensive_cars na deze code?

cars = ['Land Rover', 'BMW', 'Ferrari', 'Aston Martin',
    'McLaren', 'Honda', 'Mercedes', 'Audi']
expensive_cars = cars[2:-3]



Juist. De startindex is inclusief, de eindindex -3 is exclusief.
Let op. Bij slices is de startpositie inclusief, maar de eindpositie exclusief: het item op index -3 hoort er niet meer bij.

Vraag 5. Wat print deze code?

motors = ['Yamaha', 'Aprilia', 'KTM']
motors.append('Honda')
print(motors)



Klopt. .append() voegt een item aan het einde van de lijst toe.
Niet helemaal. .append() plakt het nieuwe item achteraan de bestaande lijst.

Vraag 6. Welke van deze regels gebruiken een index om iets uit de lijst motors te verwijderen?

motors = ['Yamaha', 'Aprilia', 'KTM', 'Honda']



Goed! del motors[0] en motors.pop(2) gebruiken een index. pop() zonder index pakt het laatste element en remove() zoekt op waarde.
Let op. Alleen de varianten met een getal tussen [ ] of ( ) gebruiken een index.

Vraag 7. Wat print deze code?

numbers = [3, 1, 2]
sorted_numbers = sorted(numbers)
print(numbers)



Juist. sorted() maakt een nieuwe gesorteerde lijst en laat numbers ongewijzigd.
Niet goed. sorted() verandert de originele lijst niet, maar geeft een nieuwe gesorteerde lijst terug.

Vraag 8. Wat print deze code?

numbers = [1, 3, 5, 7, 2]
numbers.sort(reverse=True)
print(numbers)



Klopt. sort(reverse=True) sorteert de lijst in aflopende volgorde en past de lijst zelf aan.
Niet helemaal. reverse=True zorgt voor een sortering van groot naar klein.

Vraag 9. Wat print deze code?

motors = ['Yamaha','Aprilia','KTM','Honda',
      'buell','harley','kawasaki','234']
print(len(motors))



Juist. De lijst bevat acht items, dus len(motors) geeft 8.
Niet goed. len() telt hoeveel items er in de lijst staan (hier 8).

Vraag 10. Welke van deze bewerkingen veranderen de bestaande lijst motors?

motors = ['Yamaha', 'Aprilia', 'KTM']



Goed gezien. .append() en .sort() passen de lijst zelf aan. sorted() en len() laten de lijst ongewijzigd.
Let op. Methoden als .append() en .sort() veranderen de lijst. sorted() maakt een nieuwe lijst en len() telt alleen.