Lijsten en tuples in Python

Met lijsten en tuples kan een Pythonprogramma meerdere waarden onder één naam bewaren. Dit materiaal laat zien hoe je lijsten maakt, elementen en uitsneden op positie uitleest, lijsten met methoden wijzigt en met lussen verwerkt, inclusief tabellen die als lijsten van lijsten zijn opgeslagen. Het behandelt tuples en uitpakken, legt uit waarom twee variabelen één lijst kunnen delen en hoe je een lijst veilig kopieert, en sluit af met sorteren met sort(), sorted() en sleutelfuncties.

BeginnerLes 6 van 10 in Cursus Inleiding tot programmeren met Python

Wat je leert

  1. Maak lijsten, lees afzonderlijke elementen en uitsneden via hun index en combineer lijsten en bereken kengetallen met de operatoren en ingebouwde functies van Python.
    • Maak een lijst en lees de elementen via hun index
      Schrijf lijstliterals, maak lijsten met list(), bepaal hun lengte met len(), lees elementen met positieve en negatieve indices en controleer met in of een element aanwezig is.
    • Maak een uitsnede van een lijst
      Selecteer een deel van een lijst met uitsneden van de vorm start:stop:step, voorspel het resultaat bij weggelaten of negatieve waarden of waarden buiten het bereik, en maak onderscheid tussen een uitsnede en een afzonderlijk element.
    • Combineer lijsten en bereken kengetallen met operatoren en ingebouwde functies
      Voeg lijsten samen en herhaal ze met + en *, vergelijk lijsten, bereken totalen, uitersten en gemiddelden met sum(), min() en max(), en zet strings en lijsten in elkaar om.
  2. Voeg elementen toe, plaats ze op een bepaalde positie, verwijder, zoek en vervang ze in een lijst, en gebruik het effect en de retourwaarde van elke methode correct.
    • Voeg elementen toe en verwijder ze
      Maak een lijst langer of korter met append(), extend(), insert(), pop(), remove(), del en clear(), en maak onderscheid tussen hun effecten en retourwaarden.
    • Zoek, tel en vervang elementen
      Zoek waarden met index(), count() en in, en vervang afzonderlijke elementen of hele bereiken door aan een index of uitsnede toe te kennen.
  3. Doorloop elk element van een lijst met lussen, pas patronen toe voor tellen, optellen, zoeken, filteren en transformeren, en werk met lijsten van lijsten als tabellen.
    • Doorloop elementen en posities met een lus
      Kies tussen een lus over elementen, over indices met range(len()), of over beide met enumerate() en zip(), en wijzig een lijst veilig tijdens de verwerking.
    • Pas veelgebruikte patronen voor lijstverwerking toe
      Tel elementen van een lijst op, tel ze, zoek uitersten, zoek en filter elementen en transformeer ze met lussen. Herken wanneer een ingebouwde functie hetzelfde werk doet.
    • Werk met geneste lijsten
      Sla een tabel op als een lijst met rijen, lees en wijzig cellen met twee indices en doorloop elke cel met geneste lussen.
  4. Sla vaste groepen waarden op in tuples, bepaal wanneer een tuple beter past dan een lijst en pak sequenties uit in afzonderlijke variabelen.
    • Maak tuples en kies tussen tuples en lijsten
      Schrijf tuples, inclusief lege tuples en tuples met één element, lees ze via index en uitsnede en leg uit wat hun onwijzigbaarheid toestaat en verbiedt.
    • Pak waarden in en uit
      Ken meerdere variabelen tegelijk toe vanuit een tuple of lijst, verwissel twee waarden, verzamel de overige waarden met een naam met een sterretje en geef meerdere waarden terug vanuit een functie.
  5. Voorspel hoe een wijziging via één variabele zichtbaar wordt via andere variabelen, kopieer lijsten als onafhankelijkheid nodig is en geef lijsten zonder verrassingen door aan functies.
    • Maak onderscheid tussen namen, objecten en aliassen
      Leg uit dat variabelen naar objecten verwijzen, herken wanneer twee namen één lijst delen en maak onderscheid tussen identiteit (is) en gelijkheid (==) en tussen mutatie en herbinden.
    • Kopieer lijsten en voorkom gedeelde binnenlijsten
      Maak een onafhankelijke kopie met een uitsnede, list() of copy(), herken wanneer een ondiepe kopie nog steeds geneste lijsten deelt en gebruik een diepe kopie als dat niet mag.
    • Geef lijsten door aan functies en geef ze terug
      Voorspel wanneer een functie de lijst van de aanroepende code wijzigt, kies tussen een lijst ter plaatse wijzigen en een nieuwe lijst teruggeven, en voorkom een wijzigbaar standaardargument.
  6. Orden gegevens met sort() en sorted(), oplopend of aflopend, en bepaal de volgorde met sleutelfuncties en de manier waarop tuples worden vergeleken.
    • Sorteer met sort() en sorted()
      Kies tussen een lijst ter plaatse sorteren en een gesorteerde kopie maken, sorteer in aflopende volgorde, maak onderscheid tussen omkeren en sorteren en voorspel hoe getallen en strings worden geordend.
    • Sorteer op een sleutel en sorteer records
      Sorteer op een berekende sleutel zoals lengte of tekst in kleine letters, sorteer lijsten met tuples op één of meer velden en gebruik het feit dat Python stabiel sorteert.

Lijsten en tuples in Python: uitleg

6 hoofdstukken

1

Maak en lees lijsten

Een lijst geeft een programma één plaats om een geordende collectie te bewaren, zoals scores of namen. Via de posities kun je een bepaald element benaderen, terwijl je met uitsneden een reeks elementen selecteert of een patroon doorloopt. Bij het maken, lezen en combineren van lijsten krijg je verschillende typen resultaten: een afzonderlijk element, een nieuwe lijst, een getal of een string. Als je die resultaten volgt, kun je gemakkelijker de volgende bewerking kiezen en een grensfout herkennen.

1.1 Maak een lijst en lees een positie uit

Een lijst bewaart waarden in een gekozen volgorde. Schrijf de elementen tussen vierkante haakjes, met komma’s ertussen. Elk element heeft een positie, dus ook herhaalde waarden nemen afzonderlijke plaatsen in.

Maak een lijst en bepaal de lengte
scores = [88, 92, 75]
print(scores)
print(len(scores))

Uitvoer:

[88, 92, 75]
3

len() telt elementen, niet de grootste waarde of de laatste positie. Lijsten kunnen verschillende typen bevatten, zoals in [3, "three", 3.0, True], al maakt het bij elkaar houden van verwante gegevens de verwerking meestal eenvoudiger. Zowel [] als list() maakt een lege lijst. De lengte daarvan is 0 en de lijst kan groeien terwijl het programma waarden verzamelt.

list() kan ook de elementen van een itereerbaar object verzamelen: een object dat een for-lus kan doorlopen. list(range(4)) geeft [0, 1, 2, 3]. list("cat") geeft ['c', 'a', 't']: de string levert telkens één teken. Het resultaat is een nieuwe lijst.

Tel posities vanaf nul

Een index duidt één positie aan. Python begint bij 0, dus de drie scores hebben indices 0, 1 en 2.

ExpressieResultaatPositie
scores[0]88Eerste
scores[1]92Tweede
scores[2]75Derde
scores[-1]75Laatste
scores[-2]92Voorlaatste
scores[-3]88Derde van achteren

Negatieve indices tellen terug vanaf het einde. Bij een lijst met lengte n lopen de geldige indices van -n tot en met n - 1. Het laatste element is scores[len(scores) - 1], of eenvoudiger scores[-1]. -0 is nog steeds 0; het betekent niet de laatste positie.

Herken een ongeldige index

scores[3] veroorzaakt IndexError omdat er geen vierde element bestaat. scores[len(scores)] maakt dezelfde fout: het aantal is één groter dan de laatste niet-negatieve index. Een lege lijst heeft geen geldige elementindex, ook -1 niet.

Een lijstindex moet een geheel getal zijn, geen zwevendekommagetal. scores[1.0] veroorzaakt TypeError, ook al heeft 1,0 een gehele waarde. / levert een zwevendekommagetal op, dus scores[len(scores) / 2] gaat ook mis. Bij deze lijst met drie elementen levert len(scores) // 2 het gehele getal 1 op en is scores[1] gelijk aan 92.

Controleer of een waarde voorkomt

Een lidmaatschapscontrole toetst waarden, geen posities:

colors = ["red", "green"]
print("green" in colors)
print("Green" in colors)
print("blue" not in colors)

Uitvoer:

True
False
True

in en not in geven booleaanse waarden terug en werken ook op lege lijsten. Stringvergelijkingen zijn hoofdlettergevoelig, dus "Green" en "green" komen niet overeen. Een lidmaatschapscontrole is nuttig vóór een bewerking waarvoor een waarde aanwezig moet zijn, zoals het verwijderen ervan of het zoeken naar de positie.

Belangrijkste punten

  • Lijsten behouden de volgorde en kunnen herhaalde waarden bevatten.
  • len(values) telt elementen; de laatste niet-negatieve index is len(values) - 1.
  • Negatieve indices tellen vanaf het einde, te beginnen bij -1.
  • Een ongeldige elementindex veroorzaakt IndexError; een zwevendekommagetal als index veroorzaakt TypeError.
  • in controleert of een gelijke waarde in de lijst voorkomt.

1.2 Maak een uitsnede van een sequentie

Een uitsnede selecteert een reeks elementen en geeft een nieuwe sequentie terug. Bij een lijst is het resultaat een andere lijst, ook als die maar één of geen elementen bevat.

Neem de startwaarde mee en laat de eindgrens weg
letters = ["a", "b", "c", "d", "e", "f"]
print(letters[1:4])

Uitvoer:

['b', 'c', 'd']

De geselecteerde posities zijn 1, 2 en 3. Positie 4 is de exclusieve eindgrens, dus 'e' blijft buiten de uitsnede. Bij een stapgrootte van 1 en grenzen waarvoor 0 <= start <= stop <= len(letters) geldt, is het aantal geselecteerde elementen stop - start. Hier is dat 3. letters[4:2] geeft [] omdat een voorwaartse uitsnede een eerdere eindgrens niet kan bereiken.

Laat een grens weg
UitsnedeBetekenisResultaat
letters[:2]Eerste twee elementen['a', 'b']
letters[4:]Van positie 4 tot het einde['e', 'f']
letters[:]Alle elementen in een nieuwe lijst['a', 'b', 'c', 'd', 'e', 'f']
letters[-2:]Laatste twee elementen['e', 'f']
letters[:-1]Alles behalve het laatste['a', 'b', 'c', 'd', 'e']

Negatieve grenzen tellen vanaf het einde, net als negatieve indices. letters[:n] en letters[n:] verdelen de lijst bij één grens. Als je die twee uitsneden samenvoegt, bouw je de inhoud weer op in de oorspronkelijke volgorde.

Bepaal de stapgrootte

De volledige vorm is values[start:stop:step]. Een stapgrootte van 2 selecteert een positie, slaat er één over en selecteert de volgende. letters[::2] geeft ['a', 'c', 'e'], terwijl letters[1::2] de lijst ['b', 'd', 'f'] geeft.

Een negatieve stapgrootte gaat achteruit. letters[::-1] begint bij het laatste element en levert ['f', 'e', 'd', 'c', 'b', 'a'] op. Voor een achterwaartse uitsnede met grenzen doorloopt letters[4:1:-1] de indices 4, 3 en 2 en geeft ['e', 'd', 'c']; de eindgrens blijft uitgesloten. Een stapgrootte van 0 veroorzaakt ValueError, omdat die niet naar een andere positie kan gaan.

Maak onderscheid tussen een grens en een positie

Uitsnedegrenzen mogen voorbij beide uiteinden liggen. Python brengt ze terug tot de uiteinden: letters[4:100] is ['e', 'f'] en letters[10:] is []. Deze uitsneden veroorzaken geen IndexError. Het afzonderlijke element letters[10] uitlezen doet dat wel.

letters[2] is de string 'c'. letters[2:3] is de lijst ['c']. De dubbele punt verandert het soort resultaat, wat van belang is als latere code een string of een lijst verwacht.

Werk met het resultaat

Na first_three = letters[:3] wijzigt de toekenning first_three[0] = "z" alleen die nieuwe buitenste lijst; letters[0] blijft 'a'. Een volledige uitsnede is een ondiepe kopie, dus geneste wijzigbare elementen kunnen nog steeds worden gedeeld.

Voor strings en tuples gelden dezelfde regels voor grenzen en stapgrootte. Het resultaat behoudt het oorspronkelijke sequentietype: "python"[1:4] geeft 'yth' en (10, 20, 30)[1:] geeft (20, 30).

Belangrijkste punten

  • Een uitsnede omvat de startwaarde en sluit de eindgrens uit.
  • Weggelaten grenzen selecteren tot het bijbehorende uiteinde van de sequentie.
  • De stapgrootte bepaalt de richting en de afstand tussen elementen; nul is ongeldig.
  • Uitsnedegrenzen buiten het bereik worden teruggebracht tot de uiteinden.
  • Een element opzoeken geeft één element terug; een uitsnede geeft een sequentie terug.
  • Een uitsnede van een lijst maakt een nieuwe buitenste lijst.

1.3 Combineer waarden en bereken kengetallen

Lijsten ondersteunen operatoren om sequenties op te bouwen en functies om kengetallen van hun waarden te berekenen. Ga na of een bewerking een nieuwe lijst maakt, een getal oplevert of tekst teruggeeft: die resultaten dienen verschillende doelen.

Voeg lijsten samen of herhaal ze

+ voegt twee lijsten samen en maakt een nieuwe lijst. [1, 2] + [3] geeft [1, 2, 3] zonder een van beide invoerlijsten te wijzigen. Beide operanden moeten lijsten zijn: [1, 2] + 3 veroorzaakt TypeError. Zet bij gebruik van + een afzonderlijke extra waarde in een lijst met één element.

* herhaalt de sequentie. [0] * 4 geeft [0, 0, 0, 0] en ["ab", "cd"] * 2 geeft ['ab', 'cd', 'ab', 'cd']. De operator herhaalt elementen, niet de tekens binnen elke string. Een herhalingsaantal van nul of minder geeft []. counts = [0] * 7 levert zeven tellers met een beginwaarde op. Als je een binnenlijst herhaalt, wordt die op meerdere posities gedeeld. Dat is van belang als je die rijen later wijzigt.

Totaal, uitersten en gemiddelde
ExpressieResultaat
sum([4, 8, 15])27
min([4, 8, 15])4
max([4, 8, 15])15
sum([])0

sum() telt getallen op. De functie voegt geen strings samen; sum(["a", "b"]) veroorzaakt TypeError. min() en max() vinden het kleinste en grootste element, dus moeten de elementen onderling vergelijkbaar zijn. Lijsten met alleen strings werken: max(["pear", "apple"]) geeft 'pear' door de ordening teken voor teken. Een lege lijst heeft geen minimum of maximum en veroorzaakt bij beide aanroepen ValueError.

Het rekenkundig gemiddelde is het totaal gedeeld door het aantal elementen:

temps = [18.5, 21.0, 19.5, 23.0]
if temps:
    total = sum(temps)
    mean = total / len(temps)
    print(total, mean)

Uitvoer:

82.0 20.5

De voorwaarde werkt omdat lege lijsten als onwaar en niet-lege lijsten als waar gelden. Zonder de beschermende voorwaarde zou het berekenen van het gemiddelde van [] door nul delen en ZeroDivisionError veroorzaken. Kies wat het programma moet doen als er geen metingen zijn, bijvoorbeeld None teruggeven.

Vergelijk sequenties op volgorde

== controleert of elementen op overeenkomstige posities gelijk zijn. [1, 2, 3] == [1, 2, 3] is True; [1, 2, 3] == [3, 2, 1] is False.

Vergelijk bij < en > vanaf links en stop bij het eerste ongelijke paar. [2, 9] < [3, 0] is True omdat 2 kleiner is dan 3. De 9 en 0 bepalen niets. Als de ene lijst het begin van een andere is, komt de kortste eerst: [2] < [2, 0] is True.

Wissel tussen tekst en lijsten
colors = "red,green,blue".split(",")
print(colors)
print(", ".join(["red", "green"]))

Uitvoer:

['red', 'green', 'blue']
red, green

split() splitst een string bij de scheidingstekst. join() wordt op de scheidingstekst aangeroepen en plaatst die tussen de opgegeven strings. Elk element moet een string zijn. Om getallen samen te voegen, maak je eerst een lijst met hun str()-resultaten; als je [1, 2] rechtstreeks aan join() doorgeeft, veroorzaakt dat TypeError.

Belangrijkste punten

  • + voegt lijsten samen; * herhaalt hun reeks elementen.
  • sum, min en max leveren kengetallen op.
  • Controleer op een lege lijst voordat je een gemiddelde of een uiterste berekent.
  • Sequentievergelijking gebruikt de volgorde van elementen en het eerste ongelijke paar.
  • split maakt tekstdelen; join op een scheidingstekst voegt strings samen.
2

Wijzig een lijst

Een boodschappenlijst groeit, een wachtrij verliest zijn eerste element en een vastgelegde prijs moet worden gecorrigeerd. Python biedt lijstmethoden en toekenning voor deze wijzigingen. De keuze hangt af van de vraag of je een waarde of een positie kent, of je één element of meerdere elementen nodig hebt en of je een verwijderd element wilt bewaren. Als je op de retourwaarde van een methode let, voorkom je dat een wijziging van de lijst haar naam per ongeluk door None vervangt.

2.1 Voeg lijstelementen toe en verwijder ze

Lijsten zijn wijzigbaar: een programma kan hun inhoud na het maken veranderen. Een methode hoort bij een object en wordt met een punt aangeroepen, zoals in cart.append("eggs"). Het effect op de lijst en de retourwaarde zijn twee afzonderlijke zaken.

Voeg één of meerdere elementen toe
cart = ["milk"]
cart.append("eggs")
cart.extend(["tea", "jam"])
print(cart)

Uitvoer:

['milk', 'eggs', 'tea', 'jam']

append(x) voegt precies één element aan het einde toe. Als x een lijst is, wordt die hele lijst één genest element. Als je begint met ['milk', 'eggs'], levert cart.append(["tea", "jam"]) de lijst ['milk', 'eggs', ['tea', 'jam']] met lengte 3 op.

extend(iterable) voegt de elementen van het itereerbare object afzonderlijk toe. Uitbreiden met ["tea", "jam"] maakt de lengte van de boodschappenlijst 4. Uitbreiden met "ab" voegt 'a' en 'b' afzonderlijk toe; voeg de string met append toe om 'ab' als één element te behouden.

insert(i, x) voegt een element toe vóór de huidige positie i. Na nums = [10, 30] en nums.insert(1, 20) is de lijst [10, 20, 30]. Latere elementen schuiven naar rechts. insert(0, x) voegt aan het begin toe; een index voorbij het einde voegt aan het einde toe zonder indexfout.

Verwijder op positie of waarde
BewerkingGebruiktGeeft terug
items.pop()Laatste positieVerwijderd element
items.pop(i)Positie iVerwijderd element
items.remove(x)Eerste waarde gelijk aan xNone
del items[i]Positie iGeen retourwaarde
del items[start:stop]Uitsnede van positiesGeen retourwaarde
items.clear()Hele lijstNone

Bij nums = [10, 20, 30] bewaart last = nums.pop() de waarde 30 en blijft [10, 20] over. Daarna geeft nums.pop(0) de waarde 10 terug en blijft [20] over. Een lege lijst of ongeldige positie zorgt dat pop() IndexError veroorzaakt.

remove() gebruikt een waarde. Bij pets = ["cat", "dog", "cat"] blijft na pets.remove("cat") de lijst ['dog', 'cat'] over. Alleen de eerste overeenkomst verdwijnt. Als de waarde ontbreekt, veroorzaakt remove() ValueError. Gebruik een lidmaatschapscontrole als de waarde afwezig kan zijn. Gebruik het volgende om elke 'cat' te verwijderen:

while "cat" in pets:
    pets.remove("cat")

Bij [5, 0, 7] verwijdert remove(0) de waarde 0 en blijft [5, 7] over; pop(0) verwijdert de waarde op positie 0 en geeft [0, 7]. De betekenis van het argument bepaalt de methode.

del kan een bereik verwijderen: vanuit [5, 6, 7, 8] laat del nums[1] de lijst [5, 7, 8] over en daarna laat del nums[0:2] de lijst [8] over. clear() maakt de bestaande lijst leeg.

Houd de retourwaarde goed in de gaten

append, extend, insert, remove en clear geven None terug. Schrijf cart.append("tea") op een eigen regel. Als je cart = cart.append("tea") schrijft, laat je cart naar None verwijzen; een latere cart.append("jam") veroorzaakt AttributeError. Sla een resultaat van een methode alleen op als het een waarde oplevert die het programma nodig heeft, zoals last = cart.pop() doet.

Belangrijkste punten

  • append voegt één element toe; extend voegt elk opgegeven element toe.
  • insert voegt vóór een positie toe en schuift latere elementen op.
  • pop verwijdert op positie en geeft het element terug.
  • remove verwijdert de eerste gelijke waarde en gaat mis als die ontbreekt.
  • del verwijdert posities of uitsneden; clear maakt dezelfde lijst leeg.
  • Methoden zoals append geven None terug, dus ken dat resultaat niet opnieuw toe aan de lijst.

2.2 Zoek waarden en vervang elementen

Een waarde zoeken, tellen en vervangen zijn verschillende bewerkingen. Gebruik een lidmaatschapscontrole als je een ja-of-neeantwoord nodig hebt, een zoekmethode als je een positie nodig hebt en een toekenning als je de lijst wilt wijzigen.

Zoek de eerste overeenkomende positie
days = ["Mon", "Tue", "Wed", "Tue"]
print(days.index("Tue"))
print(days.index("Tue", 2))
print(days.count("Tue"))
print(days.count("Sun"))

Uitvoer:

1
3
2
0

index(x) geeft de eerste positie terug die een waarde gelijk aan x bevat. Het optionele startargument vertelt Python waar de zoekactie moet beginnen. days.index("Tue", 2) slaat de overeenkomst op positie 1 over en vindt die op positie 3. Het antwoord blijft een index in de hele lijst, geen telling vanaf het nieuwe startpunt.

index() veroorzaakt ValueError als de waarde ontbreekt. Lijsten hebben geen methode find() die -1 teruggeeft. Als een waarde mogelijk ontbreekt, controleer dan eerst of ze aanwezig is:

if "Sun" in days:
    position = days.index("Sun")
    print(position)

Deze code toont niets omdat 'Sun' ontbreekt. count(x) kan zonder die beschermende controle worden gebruikt: de methode geeft 0 terug als er geen overeenkomsten zijn. Deze bewerkingen gebruiken gelijkheid, dus [1, 2.0].count(2) is 1. Bij tekst blijven hoofdletters en kleine letters van belang: 'tue' is niet gelijk aan 'Tue'.

Vervang één bestaand element
prices = [4.5, 3.0, 7.25]
prices[1] = 3.5
print(prices)

Uitvoer:

[4.5, 3.5, 7.25]

De oude tweede waarde wordt overschreven en de lengte blijft 3. De index moet bestaan: prices[3] = 1.0 veroorzaakt IndexError. Gebruik append() om aan het einde toe te voegen.

InstructieEffect op [10, 20]
nums[0] = 99[99, 20]
nums.insert(0, 99)[99, 10, 20]

Vervangen gebruikt een bestaande plaats. Invoegen maakt een extra plaats vóór de geselecteerde positie.

Vervang een bereik met toekenning aan een uitsnede
nums = [1, 2, 3, 4, 5]
nums[1:3] = [20, 30, 40]
print(nums)
nums[0:2] = []
print(nums)

Uitvoer:

[1, 20, 30, 40, 4, 5]
[30, 40, 4, 5]

De eerste toekenning vervangt de twee elementen op indices 1 en 2 door drie nieuwe elementen, waardoor de lijst één element groeit. Een gewone aaneengesloten uitsnede kan worden vervangen door een kortere of langere sequentie. De toekenning van [] verwijdert het geselecteerde bereik. Dit wijzigt de oorspronkelijke lijst; dat verschilt van een uitsnede uitlezen in een nieuwe variabele.

Bewerk tekst door nieuwe tekst te maken

Een string is onwijzigbaar, dus word = "cat" gevolgd door word[0] = "b" veroorzaakt TypeError. Maak een nieuwe string met word = "b" + word[1:], of maak een lijst met tekens, wijzig die en voeg de tekens samen:

letters = list("cat")
letters[0] = "b"
word = "".join(letters)
print(word)

Uitvoer:

bat

Belangrijkste punten

  • index geeft de eerste overeenkomende positie terug en veroorzaakt ValueError bij een ontbrekende waarde.
  • count geeft het aantal gelijke elementen terug, ook als dat nul is.
  • Een elementtoekenning vervangt een plaats die al bestaat.
  • Toekenning aan een aaneengesloten uitsnede kan de lengte van een lijst veranderen.
  • Strings moeten opnieuw worden opgebouwd in plaats van met elementtoekenning te worden gewijzigd.
3

Verwerk lijsten met lussen

Lussen zetten een opgeslagen collectie om in bruikbare resultaten: een totaal, een overeenkomende positie, een gefilterde lijst of een gewijzigde tabel. Elke taak begint met de keuze wat je tijdens de lus bijhoudt en welke informatie de lus van elk element nodig heeft. Sommige taken hebben alleen waarden nodig, andere posities of gekoppelde records. Geneste lijsten voegen een extra niveau toe om te volgen. Een tabel verwerken betekent dus dat je eerst de rijen en daarna de cellen doorloopt.

3.1 Doorloop elementen en posities

Een lus kan de waarden van een lijst, de posities of beide gebruiken. Kies de vorm die levert wat de lusinhoud nodig heeft. Controleer bij een wijziging van de lijst ook of de instructie een element wijzigt of alleen een lokale naam herbindt.

Gebruik elementen rechtstreeks
for name in ["Ana", "Ben"]:
    print("Hi", name)

Uitvoer:

Hi Ana
Hi Ben

De lus doorloopt elk element op volgorde. Bij elke doorgang verwijst name naar het huidige element. Een andere waarde aan name toekennen vervangt dat element in de lijst niet. In for r in readings: r = 0 verandert alleen de naam r.

Gebruik posities om elementen te vervangen
readings = [3, -1, 4, -5]
for i in range(len(readings)):
    if readings[i] < 0:
        readings[i] = 0
print(readings)

Uitvoer:

[3, 0, 4, 0]

range(len(readings)) levert 0, 1, 2 en 3. Bij index 1 is de voorwaarde waar, dus vervangt de elementtoekenning -1. Bij index 3 vervangt die -5. Positieve metingen behouden hun waarde. Met range(len(readings) + 1) zou ook index 4 worden bereikt, die niet bestaat.

Verkrijg een positie en een element samen

enumerate() levert paren. Pak elk paar uit in de luskop:

for i, name in enumerate(["Ana", "Ben"]):
    print(i, name)

Uitvoer:

0 Ana
1 Ben

enumerate(names, start=1) levert labels vanaf 1 voor een genummerde weergave. Die labels zijn niet langer de indices van de lijst die bij nul beginnen. Gebruik for item in reversed(names): om van het laatste naar het eerste element te gaan zonder de lijst te wijzigen. Gebruik voor achterwaartse indices range(len(names) - 1, -1, -1); een lijst met drie elementen geeft 2, 1, 0.

Koppel twee lijsten
names = ["Ana", "Ben"]
scores = [90, 85]
for name, score in zip(names, scores):
    print(name, score)

Uitvoer:

Ana 90
Ben 85

zip() koppelt elementen op overeenkomstige posities en stopt bij de kortste invoer. Als elk record meetelt, controleer dan de lengtes voordat je hierop vertrouwt; een laatste naam zonder bijbehorende score wordt anders overgeslagen.

Stuur een index met while

Een while-lus heeft een startindex, een grenscontrole en een stap nodig:

i = 0
while i < len(readings):
    print(readings[i])
    i += 1

Als je de verhoging vergeet, kan deze lus niet eindigen. Met <= bereik je len(readings) en veroorzaak je IndexError.

Voorkom verschuivende elementen tijdens een for-lus

Elementen verwijderen verandert de posities van de elementen die erop volgen. Als je bij [1, 2, 2, 3] elke aangetroffen 2 verwijdert terwijl je diezelfde lijst doorloopt, blijft [1, 2, 3] over: de tweede 2 schuift naar de positie die net is bezocht. Doorloop nums[:] als verwijderingen effect moeten hebben op het origineel, of maak een nieuwe lijst met de elementen die je wilt behouden. Ook elementen toevoegen aan de lijst die wordt doorlopen kan ervoor zorgen dat de lus zich onverwacht gedraagt.

Belangrijkste punten

  • Gebruik een directe lus voor elementen, range(len(...)) voor posities en enumerate voor beide.
  • De lusvariabele herbinden vervangt geen element van de lijst.
  • zip stopt bij de kortste invoer.
  • reversed doorloopt achteruit zonder de lijst te wijzigen.
  • Een while-lus moet haar index verhogen en vóór len(values) stoppen.
  • Maak een nieuwe lijst of doorloop een kopie wanneer je elementen verwijdert.

3.2 Bereken totalen, zoek en maak nieuwe lijsten

Veel lijstproblemen gebruiken enkele herbruikbare luspatronen. Bepaal welk resultaat het programma nodig heeft, stel dat resultaat vóór de lus in en werk het bij wanneer elk element langskomt.

Houd een totaal of aantal bij
sales = [120, 75, 205, 50]
total = 0
for sale in sales:
    total += sale
print(total)

Uitvoer:

450

Het lopende totaal wordt 120, 195, 400 en 450. Als je total = 0 binnen de lus instelt, wis je bij elke doorgang het eerdere werk. sum(sales) berekent dit totaal rechtstreeks.

Een teller telt 1 erbij op voor elk element dat voldoet, niet de waarde van het element:

scores = [72, 45, 60, 88, 59]
passed = 0
for score in scores:
    if score >= 60:
        passed += 1
print(passed)

De uitvoer is 3: 72, 60 en 88 voldoen. > 60 zou 2 geven omdat precies 60 wordt uitgesloten. Zorg dat de formulering van de drempelwaarde en de vergelijking met elkaar overeenkomen.

Zoek een uiterste

Initialiseer bij een niet-lege lijst een lopend maximum met een werkelijk element:

temps = [-3, -8, -1, -5]
highest = temps[0]
for temp in temps[1:]:
    if temp > highest:
        highest = temp
print(highest)

De uitvoer is -1. Beginnen bij 0 zou ten onrechte 0 behouden, omdat alle metingen lager zijn. Gebruik < om het minimum te vinden, of gebruik de ingebouwde functies min() en max(). Controleer of de lijst leeg is voordat je het eerste element benadert.

Stop bij de eerste overeenkomst
values = [4, 0, -2, 5, -7]
position = -1
for i, value in enumerate(values):
    if value < 0:
        position = i
        break
print(position)

De uitvoer is 2. -1 is een gekozen signaal voor geen overeenkomst; gebruik het niet als index tenzij de zoekactie is geslaagd, omdat het ook een geldige index voor het laatste element is. break bewaart de eerste overeenkomende positie. Zonder die instructie zouden latere overeenkomsten het resultaat overschrijven.

x in values controleert op één exacte waarde en values.index(x) vindt de eerste positie ervan. Een voorwaarde zoals “is negatief” vereist een zoekactie op basis van een voorwaarde, zoals de lus hierboven.

Filter of transformeer

Een filter behoudt geselecteerde oorspronkelijke elementen:

passing = []
for score in scores:
    if score >= 60:
        passing.append(score)
print(passing)

De uitvoer is [72, 60, 88]; scores behoudt alle vijf elementen. Een transformatie berekent één nieuw element uit elk oorspronkelijk element:

nums = []
for text in ["3", "14", "15"]:
    nums.append(int(text))
print(nums, sum(nums))

De uitvoer is [3, 14, 15] 32. De conversie vindt vóór het optellen plaats; de oorspronkelijke strings optellen gaat mis.

Geef een herbruikbaar resultaat terug
def average(values):
    if not values:
        return None
    return sum(values) / len(values)

average([18.5, 21.0, 19.5, 23.0]) geeft 20.5 terug. Bij een lege lijst geeft de functie None terug zonder door nul te delen, en ze laat de invoerlijst ongewijzigd.

Belangrijkste punten

  • Initialiseer een accumulator vóór de lus.
  • Een teller telt 1 per overeenkomst op; een totaal telt waarden op.
  • Begin een lopend uiterste met een werkelijk element.
  • Gebruik break om de eerste overeenkomst bij een zoekactie te behouden.
  • Filteren selecteert elementen; transformeren berekent nieuwe waarden.
  • Met een functie die een waarde teruggeeft, kan de aanroepende code een resultaat bewaren zonder de invoer te wijzigen.

3.3 Lees en verwerk een tabel met rijen

Een geneste lijst is een lijst die andere lijsten bevat. Een tabel gebruikt gewoonlijk één binnenlijst per rij. Elke opzoeking selecteert één niveau, dus zijn twee indices nodig om een cel te lezen.

Selecteer de rij en daarna de cel
grid = [[1, 2, 3], [4, 5, 6]]
print(grid[1])
print(grid[1][2])
print(len(grid), len(grid[0]))

Uitvoer:

[4, 5, 6]
6
2 3

grid[1] selecteert de tweede rij; [2] selecteert daarna het derde element van die rij. len(grid) telt rijen, terwijl len(grid[0]) cellen in de eerste rij telt. Deze rechthoekige tabel heeft zes cellen. grid[2][1] gaat mis bij de eerste opzoeking omdat rij 2 niet bestaat. Als je rij- en kolomposities verwisselt, kun je de verkeerde cel selecteren of IndexError veroorzaken.

Wijzig een cel of een hele rij

grid[0][1] = 20 wijzigt de tweede cel in de eerste rij, wat [[1, 20, 3], [4, 5, 6]] geeft. grid[0] = [0, 0, 0] vervangt de hele eerste rij. Het aantal opzoekingen laat zien welk niveau wordt vervangen.

Doorloop elke waarde
grid = [[1, 2, 3], [4, 5, 6]]
total = 0
for row in grid:
    for value in row:
        total += value
print(total)

Uitvoer:

21

De binnenste lus voltooit de eerste rij voordat de buitenste lus de tweede rij levert. Ze telt 1, 2, 3 en daarna 4, 5, 6 op. Een kolomtotaal gebruikt één vaste positie uit elke rij:

column_total = 0
for row in grid:
    column_total += row[1]
print(column_total)

De uitvoer is 7, afkomstig van 2 en 5. Voor deze code moet elke rij een tweede element hebben.

Rijen hoeven niet even lang te zijn. [[1], [2, 3]] is een geldige geneste lijst. Directe geneste lussen doorlopen nog steeds elke waarde, omdat elke binnenste lus haar eigen rij volgt. Als je aanneemt dat alle rijen len(grid[0]) elementen hebben, mis je hier waarden. Om cellen in zo’n tabel te tellen, tel je len(row) voor elke rij op.

Maak onafhankelijke rijen
table = []
for r in range(3):
    table.append([0] * 4)
table[0][0] = 1
print(table)

Uitvoer:

[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Elke doorgang maakt een nieuwe lijst met vier elementen. De verkorte vorm [[0] * 4] * 3 herhaalt een referentie naar één rij; als je de eerste cel ervan wijzigt, is dat in alle drie de rijen zichtbaar.

Sla records op

Een rij kan één record beschrijven in plaats van een rij getallen. Bij students = [["Ana", 90], ["Ben", 85]] is students[1][0] gelijk aan 'Ben' en students[1][1] aan 85. Als elk record twee elementen heeft, pakt for name, score in students: ze uit in bruikbare namen. Lijsten met tuples kunnen dezelfde soort records voorstellen.

Belangrijkste punten

  • Twee indices selecteren een rij en daarna een cel binnen die rij.
  • len(grid) telt rijen; rijlengtes kunnen verschillen.
  • Geneste lussen verwerken elke rij met een eigen binnenste lus.
  • Voor een kolomopzoeking moet die positie in elke geselecteerde rij bestaan.
  • Maak elke wijzigbare rij afzonderlijk om gedeelde cellen te voorkomen.
4

Gebruik tuples en pak ze uit

Vaste groepen waarden hebben vaak betekenisvolle posities: een punt heeft coördinaten en een resultaatrecord heeft een naam en score. Tuples houden die posities vast, terwijl uitpakken elke waarde een bruikbare naam geeft. Deze hulpmiddelen verklaren ook hoe één toekenning twee waarden kan verwisselen en hoe een functie meerdere resultaten kan teruggeven. Een onwijzigbare buitenste tuple kan nog steeds een wijzigbare lijst bevatten, dus volg zowel de container als de objecten erin.

4.1 Kies een lijst of een tuple

Een tuple bewaart elementen op volgorde, net als een lijst, maar de elementen op zijn posities kunnen niet worden vervangen, toegevoegd of verwijderd. Dit heet onwijzigbaarheid. Tuples zijn geschikt voor vaste groepen zoals coördinaten, datums en records; lijsten zijn geschikt voor collecties die groeien of veranderen.

Maak en lees een tuple
point = (3, 4)
date = (2024, 7, 15)
print(date[0])
print(date[1:])
print(len(date))

Uitvoer:

2024
(7, 15)
3

Voor indexering, negatieve indices, uitsneden en lidmaatschapscontroles gelden bij tuples dezelfde regels als bij lijsten. Een uitsnede van een tuple geeft een tuple terug. Je kunt een tuple met een lus doorlopen of +, *, min, max, sum, count en index gebruiken als de elementen geschikt zijn voor de bewerking.

De komma maakt een niet-lege tuple. t = 3, 4 maakt ook zonder haakjes (3, 4). Een tuple met één element heeft een afsluitende komma nodig:

ExpressieWaarde en type
(5)Geheel getal 5
(5,)Tuple met één element (5,)
()Lege tuple
tuple([1, 2])Tuple (1, 2)
tuple("ab")Tuple ('a', 'b')

list(t) zet de elementen van een tuple om in een wijzigbare lijst.

Begrijp wat niet kan veranderen

point[0] = 5 veroorzaakt TypeError omdat een tuple geen elementtoekenning ondersteunt. Tuples hebben geen methoden append, remove of sort; point.append(5) veroorzaakt AttributeError.

Een naam kan nog wel aan een nieuwe tuple worden gebonden:

point = (3, 4)
point = (5,) + point[1:]
print(point)

De uitvoer is (5, 4). De expressie maakt een nieuwe tuple; ze wijzigt de oude niet.

Een tuple kan een wijzigbaar element bevatten
t = ([1, 2], "x")
t[0].append(3)
print(t)

Uitvoer:

([1, 2, 3], 'x')

De eerste positie bevat nog steeds dezelfde lijst. De inhoud van die lijst is veranderd. t[0] = [9] zou het object op die positie vervangen en is verboden. De onwijzigbaarheid van de buitenste tuple zet een binnenlijst niet vast.

Kies de structuur die bij de taak past

Gebruik (x, y) voor een coördinaat, (255, 128, 0) voor een RGB-kleur of ("Ana", 90) voor een record met twee velden. Elke positie heeft een bepaalde betekenis. Gebruik een lijst voor alle scores van de klas of de artikelen in een winkelwagen, die kunnen groeien en opnieuw worden geordend. Een lijst met tuples, zoals [("Ana", 90), ("Ben", 85)], combineert een wijzigbare collectie met vaste recordposities.

Een tuple met getallen of strings kan als dictionarysleutel dienen, zoals in {(0, 0): "origin"}. Sleutels moeten hashbaar zijn: ze moeten de vaste regels van Python ondersteunen voor het opzoeken via een sleutel. Een lijst is niet hashbaar en een tuple die een lijst bevat ook niet.

Vergelijk tuples

De vergelijking begint links en stopt bij het eerste ongelijke paar. (1, 2, 5) < (1, 3, 0) is True: de eerste waarden zijn gelijk en 2 is kleiner dan 3. Dezelfde regel ordent een lijst met tuplerecords als er geen sleutelfunctie is opgegeven.

Belangrijkste punten

  • Een tuple heeft vaste elementposities, maar kan een wijzigbaar object bevatten.
  • De komma maakt een niet-lege tuple; (5,) heeft één element.
  • Voor het lezen van tuples gelden de regels voor sequenties.
  • Een tuplenaam herbinden levert een andere waarde op zonder de oude tuple te wijzigen.
  • Tuples die als dictionarysleutel worden gebruikt, moeten hashbare inhoud hebben.
  • Bij tuplevergelijking bepaalt het eerste ongelijke paar elementen de volgorde.

4.2 Pak records uit in namen

Inpakken verzamelt waarden in een tuple. Uitpakken kent de elementen van een itereerbaar object op volgorde toe aan namen. Samen maken ze het mogelijk om velden van een record duidelijke namen te geven en meerdere resultaten van één functie te ontvangen.

Koppel namen aan waarden
record = "Ana", 34, "Lima"
name, age, city = record
print(name, age, city)

Uitvoer:

Ana 34 Lima

Het eerste element wordt name, het tweede age en het derde city. Uitpakken werkt ook bij lijsten en strings: first, second = [10, 20] en a, b, c = "xyz" kennen hun elementen op volgorde toe. user, domain = "ana@example.com".split("@") geeft 'ana' en 'example.com', omdat het splitsen twee delen oplevert.

Zonder naam met een sterretje moeten de aantallen precies overeenkomen. x, y = (1, 2, 3) veroorzaakt ValueError door te veel waarden; x, y, z = (1, 2) veroorzaakt ValueError door te weinig waarden. Python gooit extra elementen niet zonder melding weg.

Verwissel waarden veilig
a = 1
b = 2
a, b = b, a
print(a, b)

De uitvoer is 2 1. Python evalueert de hele rechterkant met de oude waarden voordat een van beide namen links een waarde krijgt. De poging met twee instructies, a = b gevolgd door b = a, verliest de oude waarde van a en maakt beide namen gelijk aan 2.

Verzamel de overige elementen

Een naam met een sterretje krijgt een lijst met de overgebleven waarden:

first, *rest = [5, 6, 7, 8]
print(first, rest)
*init, last = [5, 6, 7, 8]
print(init, last)

Uitvoer:

5 [6, 7, 8]
[5, 6, 7] 8

Het sterretje kan ook tussen namen zonder sterretje staan: first, *middle, last = (5, 6, 7, 8) geeft middle de lijst [6, 7]. Het verzamelde object is altijd een lijst, ook bij het uitpakken van een tuple. head, *rest = [5] laat rest achter als []. Er moeten genoeg elementen zijn voor de namen zonder sterretje en in hetzelfde uitpakpatroon is maar één naam met een sterretje toegestaan.

Pak uit tijdens een lus
for name, score in [("Ana", 90), ("Ben", 85)]:
    print(name, score)

Uitvoer:

Ana 90
Ben 85

De kop pakt elk record uit zodra het wordt geleverd. Zo werken ook for i, item in enumerate(values): en for a, b in zip(left, right):: elke iteratie levert een paar.

Geef meerdere resultaten terug
def min_max(values):
    return min(values), max(values)

low, high = min_max([7, 2, 9])
result = min_max([7, 2, 9])
print(low, high)
print(result)

Uitvoer:

2 9
(2, 9)

De functie geeft één tuple terug. De aanroepende code kan die uitpakken of het hele object bewaren. Een onderstrepingsteken geeft volgens afspraak een naam aan een waarde die de code niet nodig heeft: _, month, day = (2024, 7, 15) bewaart de maand en dag onder beschrijvende namen. _ blijft een gewone variabele en is geen speciale bewerking om iets weg te gooien.

Belangrijkste punten

  • Inpakken verzamelt waarden; uitpakken kent ze op volgorde toe.
  • Namen zonder sterretje vereisen een exact aantal elementen.
  • Een naam met een sterretje krijgt een lijst met overgebleven waarden, die leeg kan zijn.
  • Verwissel met a, b = b, a om beide oude waarden te behouden.
  • Meerdere retourwaarden worden gewoonlijk in één tuple ingepakt.
5

Volg gedeelde objecten en maak kopieën

Twee namen kunnen naar één lijst verwijzen en een gekopieerde buitenste lijst kan nog steeds haar rijen delen. Deze relaties verklaren waarom een wijziging soms op meer dan één plaats zichtbaar is. Volg naar welk object een naam verwijst voordat je bepaalt of een bewerking dat object wijzigt of de naam herbindt. Dezelfde redenering geldt wanneer een functie een lijst ontvangt en wanneer een standaardargument bij meerdere aanroepen opnieuw wordt gebruikt. Kopiëren zorgt voor onafhankelijkheid op de niveaus waar die nodig is.

5.1 Volg namen die één lijst delen

Een variabele is een naam die naar een object verwijst. Een toekenning verandert waarnaar een naam verwijst; ze kopieert het object niet automatisch. Bij een wijzigbare lijst kunnen twee namen daardoor dezelfde wijzigingen laten zien.

Volg de referenties
a = [1, 2, 3]
b = a
b.append(4)
print(a)
print(b)

Uitvoer:

[1, 2, 3, 4]
[1, 2, 3, 4]

Er is één lijst met twee namen. b is een alias van a. De toevoeging wijzigt het gedeelde object, dus zie je het toegevoegde element als je het via een van beide namen leest. Teken bij het volgen van deze code twee pijlen, één vanaf elke naam, naar dezelfde lijst.

Maak onderscheid tussen gelijkheid en identiteit
a = [1, 2]
b = a
c = [1, 2]
print(a == b, a == c)
print(a is b, a is c)

Uitvoer:

True True
True False

== vergelijkt de inhoud; is toetst of de objecten hetzelfde object zijn. c heeft gelijke inhoud, maar is een afzonderlijke lijst. id(x) geeft het identiteitsnummer van een object, dus komt id(a) == id(b) overeen met a is b. Identiteitsnummers vertellen niet welke elementen een lijst bevat.

Gebruik == om te vragen of de inhoud overeenkomt. Gebruik is om te controleren of een object wordt gedeeld of om een speciaal object zoals None te toetsen. Een nieuwe lijstliteral maakt een afzonderlijke lijst, dus is a is [1, 2] onwaar voor een bestaande lijst a, ook als de inhoud overeenkomt.

Mutatie en herbinden hebben een verschillend bereik
InstructieWat verandert?Wat ziet een alias?
b.append(4)Bestaande lijstToegevoegd element
b[0] = 9Bestaande lijstVervangen element
b = [7, 8]De naam bOorspronkelijke lijst ongewijzigd

Na de laatste instructie verwijst b naar een nieuwe lijst. a blijft naar het oorspronkelijke object verwijzen. Eén naam herbinden leidt niet elke naam om die ooit naar dat object verwees.

Volg += en + afzonderlijk

Bij lijsten breidt += de bestaande lijst uit:

a = [1]
b = a
a += [2]
print(a, b)

De uitvoer is [1, 2] [1, 2]. Ter vergelijking:

a = [1]
b = a
a = a + [2]
print(a, b)

De uitvoer is [1, 2] [1]. + maakt een nieuwe lijst en de toekenning laat a daarnaar verwijzen. b verwijst nog steeds naar de oorspronkelijke lijst met één element.

Zoek minder zichtbare aliassen

row = [0, 0] gevolgd door table = [row, row] slaat dezelfde rij twee keer op. table[0][0] = 5 levert [[5, 0], [5, 0]] op omdat beide posities naar dezelfde binnenlijst verwijzen.

Getallen en strings kunnen niet ter plaatse veranderen. Na x = 5, y = x, x += 1 blijft y gelijk aan 5; x is opnieuw gebonden. Ook de elementposities van een tuple blijven vast, maar een binnenlijst kan veranderen. Na t = ([1], 2), u = t en t[0].append(3) toont u de waarde ([1, 3], 2): beide namen verwijzen nog steeds naar dezelfde tuple en dezelfde wijzigbare lijst daarin.

Belangrijkste punten

  • Een toekenning deelt een referentie; ze kopieert een lijst niet.
  • == vergelijkt waarden, terwijl is objectidentiteit controleert.
  • Een mutatie is zichtbaar via aliassen; herbinden laat één naam ergens anders naar verwijzen.
  • Bij lijsten wijzigt += de bestaande lijst, terwijl + een nieuwe lijst maakt.
  • Delen kan zowel binnen een tabel of tuple als tussen variabelenamen voorkomen.

5.2 Kopieer de niveaus die onafhankelijk moeten zijn

Kopiëren maakt een nieuw object, maar de diepte van die kopie is van belang. Een nieuwe buitenste lijst kan nog steeds referenties naar de oorspronkelijke binnenlijsten bevatten.

Maak een nieuwe buitenste lijst
a = [1, 2, 3]
b = a.copy()
b.append(4)
print(a)
print(b)
print(a is b)

Uitvoer:

[1, 2, 3]
[1, 2, 3, 4]
False

a[:], list(a) en a.copy() maken allemaal een ondiepe kopie van een lijst. De buitenste container is nieuw en de referenties naar de elementen worden gekopieerd. Bij onwijzigbare getallen of strings laat het vervangen of toevoegen van een element in de ene buitenste lijst de andere ongemoeid.

Bekijk wat een ondiepe kopie deelt
a = [[1, 2], [3, 4]]
b = a.copy()
b[0].append(99)
print(a)
print(b is a, b[0] is a[0])

Uitvoer:

[[1, 2, 99], [3, 4]]
False True

De twee buitenste lijsten verschillen, maar hun eerste elementen verwijzen naar dezelfde binnenlijst. append() wijzigt dat binnenste object.

Een positie in b vervangen is iets anders. Na b[1] = [0] heeft b een andere tweede rij, terwijl a[1] gelijk blijft aan [3, 4]. De toekenning wijzigt één referentie in de buitenste lijst van b; ze wijzigt de oude tweede rij niet.

Kopieer ook geneste lijsten
import copy

a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)
b[0].append(99)
print(a)
print(b)

Uitvoer:

[[1, 2], [3, 4]]
[[1, 2, 99], [3, 4]]

import copy maakt de kopieermodule beschikbaar. copy.deepcopy() kopieert de geneste lijststructuur recursief, zodat wijzigingen aan gekopieerde binnenlijsten het origineel niet bereiken. Gebruik dit wanneer wijzigingen op die binnenste niveaus onafhankelijk moeten zijn. Een ondiepe kopie volstaat als alleen de volgorde of elementreferenties van de buitenste lijst veranderen.

Voorkom herhaalde referenties bij het maken van rijen
table = [[0] * 3] * 2
table[0][0] = 7
print(table)

De uitvoer is [[7, 0, 0], [7, 0, 0]]. De vermenigvuldiging herhaalde de referentie naar één rij. Er zijn geen twee rijen gemaakt.

Maak elke rij binnen de lus:

table = []
for r in range(2):
    table.append([0] * 3)
table[0][0] = 7
print(table)

De uitvoer is [[7, 0, 0], [0, 0, 0]]. [0] * 3 zelf is veilig voor onafhankelijke tellers: gehele getallen kunnen niet worden gewijzigd en elementtoekenning vervangt slechts één positie.

Kies een kopie met een reden

Om de oorspronkelijke volgorde vóór het sorteren te behouden, is een nieuwe buitenste lijst nodig. Om oorspronkelijke geneste metingen te behouden terwijl je gekopieerde cellen wijzigt, zijn ook onafhankelijke binnenlijsten nodig. Verwerking waarbij je alleen leest, heeft geen kopie nodig en bij bewust gedeelde wijzigingen kun je aliassen gebruiken. Controleer bij het onderzoeken van een programmeerfout in een geneste structuur zowel b is a als b[0] is a[0]; als je alleen de buitenste lijsten toetst, mis je gedeelde binnenlijsten.

Belangrijkste punten

  • Een uitsnede, list() en copy() maken een nieuwe buitenste lijst.
  • Een ondiepe kopie behoudt referenties naar de oorspronkelijke elementen.
  • Een gekopieerde rij vervangen verschilt van een gedeelde rij wijzigen.
  • copy.deepcopy kopieert geneste lijsten recursief.
  • Vermenigvuldiging van een geneste lijst herhaalt referenties naar één rij.
  • Kopieer alleen de niveaus waarvan wijzigingen onafhankelijk moeten zijn.

5.3 Maak duidelijk welk effect een functie op lijsten heeft

Een functieparameter is een andere naam voor het object dat de aanroepende code doorgeeft. Een lijstargument wordt niet automatisch gekopieerd. De functie kan dat object wijzigen, haar lokale parameter herbinden of een nieuw resultaat teruggeven; deze acties beïnvloeden de aanroepende code op verschillende manieren.

Een mutatie bereikt de aanroepende code
def add_bonus(scores):
    scores.append(5)

marks = [80]
result = add_bonus(marks)
print(marks)
print(result)

Uitvoer:

[80, 5]
None

scores en marks verwijzen aanvankelijk naar dezelfde lijst. Toevoegen via scores wijzigt die lijst. Omdat de functie geen expliciete return-instructie heeft, is haar resultaat None.

def reset(scores): scores = [] daarentegen herbindt alleen de lokale parameter. De marks van de aanroepende code verwijst nog steeds naar de oude lijst. Gebruik scores.clear() om die gedeelde lijst zelf leeg te maken.

Bewaar zo nodig een teruggegeven lijst

Twee veelgebruikte ontwerpen zijn een lijst ter plaatse wijzigen en None teruggeven, of de lijst ongemoeid laten en een nieuwe lijst teruggeven:

def drop_first(values):
    del values[0]

def tail(values):
    return values[1:]

Bij nums = [1, 2, 3] laat de aanroep drop_first(nums) de waarde van nums achter als [2, 3]. Met nums = drop_first(nums) zou nums daarentegen aan None worden gebonden. Als je opnieuw begint met [1, 2, 3], geeft shorter = tail(nums) aan shorter de lijst [2, 3], terwijl nums ongewijzigd blijft. Als je tail(nums) aanroept zonder het resultaat te bewaren, wordt de nieuwe lijst weggegooid.

Andere ontwerpen zijn ook nuttig: sum() geeft een kengetal terug en pop() wijzigt een lijst en geeft een element terug. Maak het effect en de retourwaarde duidelijk in de naam of docstring van een functie.

Maak een resultaat zonder de invoer te wijzigen
def without_negatives(values):
    kept = []
    for value in values:
        if value >= 0:
            kept.append(value)
    return kept

original = [3, -2, 0, 7]
print(without_negatives(original))
print(original)

Uitvoer:

[3, 0, 7]
[3, -2, 0, 7]

De aanroepende code kan haar buitenste lijst ook beschermen door een ondiepe kopie door te geven, zoals drop_first(original[:]). Voor een bewerking die binnenlijsten wijzigt, moet ook op die niveaus worden gekopieerd.

Voorkom een gedeelde wijzigbare standaardwaarde
def add_item(item, basket=[]):
    basket.append(item)
    return basket

De standaardlijst wordt één keer gemaakt, wanneer de def-instructie wordt uitgevoerd. add_item("a") geeft ['a'] terug en de volgende aanroep met de standaardwaarde, add_item("b"), geeft ['a', 'b'] terug. Gebruik None om een nieuwe lijst te vragen:

def add_item(item, basket=None):
    if basket is None:
        basket = []
    basket.append(item)
    return basket

Elke aanroep zonder winkelmand maakt nu een eigen lijst. Als je een bestaande winkelmand doorgeeft, zijn bewust gedeelde wijzigingen nog steeds mogelijk. Een functie kan een getal of string niet wijzigen en ook de posities van een tuple niet vervangen, maar kan wel een lijst in een tuple wijzigen, bijvoorbeeld door pair[0].append(9) aan te roepen.

Belangrijkste punten

  • Een parameter verwijst aanvankelijk naar het object van de aanroepende code.
  • Een lijstparameter wijzigen verandert dat object; de parameter herbinden doet dat niet.
  • Bewaar een nieuw teruggegeven lijst als het programma die nodig heeft.
  • Controleer zowel het effect als de retourwaarde van een functie.
  • Een wijzigbare standaardlijst wordt gedeeld tussen aanroepen die de standaardwaarde gebruiken.
  • Gebruik None en maak binnen de functie een lijst voor een nieuwe standaardwaarde.
6

Zet sequenties op volgorde

Records op volgorde zetten vereist twee keuzes: welke waarden bepalen de volgorde en moet de oorspronkelijke collectie veranderen? Python kan een lijst ter plaatse sorteren of uit elk itereerbaar object een nieuwe lijst teruggeven. Met sleutelfuncties kan een programma één veld, een berekende waarde of meerdere velden achtereen vergelijken. Gelijke sleutels behouden hun invoervolgorde, wat de volgorde bij gelijke waarden voorspelbaar maakt en sorteren op meer dan één regel ondersteunt.

6.1 Kies hoe je gegevens sorteert of omkeert

Sorteren zet elementen in vergelijkingsvolgorde. Omkeren draait hun huidige volgorde om. Bepaal ook of het programma de bestaande lijst moet wijzigen of die moet behouden en een nieuwe lijst moet ontvangen.

Sorteer ter plaatse of bewaar een nieuwe lijst
nums = [3, 1, 2]
new = sorted(nums)
print(nums)
print(new)
nums.sort()
print(nums)

Uitvoer:

[3, 1, 2]
[1, 2, 3]
[1, 2, 3]

sorted() maakt een nieuwe lijst. sort() is een lijstmethode die de bestaande lijst opnieuw ordent en None teruggeeft. Door nums = nums.sort() verliest de naam zijn referentie naar de lijst en wordt hij aan None gebonden. Schrijf nums.sort() op een eigen regel of gebruik nums = sorted(nums). print(nums.sort()) toont None, ook al is de lijst opnieuw geordend.

sorted() accepteert elk itereerbaar object en geeft altijd een lijst terug. sorted((3, 1, 2)) geeft [1, 2, 3] en sorted("cab") geeft ['a', 'b', 'c']. Strings en tuples hebben geen sort()-methode die ter plaatse werkt.

Aflopende en omgekeerde volgorde
Expressie voor nums = [3, 1, 2]ResultaatWijzigt nums?
sorted(nums, reverse=True)[3, 2, 1]Nee
nums.sort(reverse=True)Geeft None terug; lijst wordt [3, 2, 1]Ja
nums[::-1][2, 1, 3]Nee
list(reversed(nums))[2, 1, 3]Nee
nums.reverse()Geeft None terug; lijst wordt [2, 1, 3]Ja

Elke rij begint met de oorspronkelijke lijst. reverse=True vraagt om aflopende vergelijkingsvolgorde en moet met de naam worden opgegeven; sorted(nums, True) veroorzaakt TypeError. Omkeren doorloopt alleen de bestaande posities achteruit en levert dus niet noodzakelijk aflopende waarden op.

Controleer de waarden die worden vergeleken

Getallen worden op getalswaarde gesorteerd, ook als gehele getallen en zwevendekommagetallen door elkaar staan: sorted([2.5, -1, 2]) geeft [-1, 2, 2.5].

Tekst wordt teken voor teken vergeleken. sorted(["10", "9", "100"]) geeft ['10', '100', '9']. Het eerste teken '1' komt vóór '9' en een string die het begin vormt van een langere string, komt vóór die langere string. Zet strings met getallen om met int() of float() als je een numerieke volgorde wilt.

De hoofdletters A–Z komen vóór de kleine letters a–z. sorted(["b", "B", "a"]) geeft ['B', 'a', 'b']. De standaardvolgorde van strings is gebaseerd op tekencodes; het is geen hoofdletterongevoelige woordenboekvolgorde.

Alle elementen die worden vergeleken, moeten onderling < ondersteunen. sorted([3, "two", 1]) veroorzaakt TypeError. Schoon de gegevens op of zet ze om voordat je sorteert.

Gebruik gesorteerde posities

Bij een oneven aantal scores is de middelste waarde na het sorteren gemakkelijk af te lezen:

scores = [72, 95, 64, 88, 79]
ordered = sorted(scores)
median = ordered[len(ordered) // 2]
print(ordered)
print(median)

De uitvoer is [64, 72, 79, 88, 95] gevolgd door 79. De oorspronkelijke lijst bewaart nog steeds de volgorde waarin de scores binnenkwamen. Deze berekening met één middelste element geldt voor niet-lege lijsten met een oneven lengte.

Belangrijkste punten

  • sort wijzigt een lijst en geeft None terug; sorted geeft een nieuwe lijst terug.
  • sorted accepteert itereerbare objecten zoals tuples en strings.
  • reverse=True sorteert aflopend; alleen omkeren draait de huidige posities om.
  • Strings met getallen volgen de tekstvolgorde, tenzij je ze omzet.
  • Elementen moeten onderling vergelijkbaar zijn.

6.2 Sorteer records op de velden die ertoe doen

Een sleutelfunctie berekent de vergelijkingswaarde voor elk element. De oorspronkelijke elementen blijven intact in het gesorteerde resultaat. Zo kan een programma tekst op lengte of records op een geselecteerd veld sorteren.

Geef een functie door, geen functieaanroep
words = ["kiwi", "fig", "banana"]
print(sorted(words, key=len))

Uitvoer:

['fig', 'kiwi', 'banana']

Python roept len één keer per element aan en vergelijkt de resulterende lengtes, 4, 3 en 6. Geef key=len door, zonder haakjes. key=len() probeert len direct zonder argument aan te roepen en gaat mis.

Gebruik key=str.lower om met kleine letters te vergelijken. Bij ["banana", "apple", "Cherry"] is de standaardvolgorde ['Cherry', 'apple', 'banana']. Met key=str.lower is het resultaat ['apple', 'banana', 'Cherry']. De oorspronkelijke hoofdletter C blijft in het resultaat staan; alleen de vergelijkingssleutels bestaan uit kleine letters.

Selecteer een recordveld
results = [("Ana", 90), ("Ben", 72), ("Cy", 85)]

def by_score(record):
    return record[1]

print(sorted(results, key=by_score))

Uitvoer:

[('Ben', 72), ('Cy', 85), ('Ana', 90)]

De functie ontvangt telkens één record. record[1] selecteert de score ervan. Voeg reverse=True toe om de hoogste score eerst te zetten. results.sort(key=by_score, reverse=True) gebruikt dezelfde regel, maar wijzigt results zelf.

key=by_score(results) is anders: dit roept de functie aan op de hele lijst en geeft het resultaat door als sleutelargument. Hier is dat resultaat de tuple ('Ben', 72), die niet als functie kan worden aangeroepen, zodat het sorteren TypeError veroorzaakt.

Gebruik meerdere velden

Zonder sleutel vergelijken tuples hun eerste elementen en daarna hun tweede elementen om de volgorde bij gelijke eerste elementen te bepalen. Het sorteren van [("Ben", 72), ("Ana", 90), ("Ana", 85)] geeft [('Ana', 85), ('Ana', 90), ('Ben', 72)].

Een sleutel kan een tuple teruggeven om een andere veldvolgorde te kiezen:

def rank_key(record):
    return (-record[1], record[0])

results = [("Dee", 85), ("Ana", 90), ("Cy", 85)]
print(sorted(results, key=rank_key))

Uitvoer:

[('Ana', 90), ('Cy', 85), ('Dee', 85)]

Door het tegengestelde van de score te nemen, krijgen hogere scores kleinere sleutels. Namen bepalen daarna de oplopende volgorde bij gelijke scores. reverse=True op een positieve sleutel (score, name) zou beide velden omkeren, inclusief de namen, en zou dus niet aan deze regel met verschillende richtingen voldoen.

Behoud de volgorde bij gelijke sleutels

Python sorteert stabiel: elementen met gelijke sleutels behouden hun invoervolgorde. Als je ["bb", "a", "cc", "d"] op len sorteert, krijg je ['a', 'd', 'bb', 'cc']. Bij de twee woorden van één letter blijft 'a' eerst; bij de woorden van twee letters blijft 'bb' eerst. Stabiliteit maakt het ook mogelijk eerst op een secundair veld en daarna op het hoofdveld te sorteren.

Ook min() en max() accepteren sleutelfuncties. max(words, key=len) geeft 'banana' terug, niet de lengte ervan. Bij gelijke sleutels geven deze functies het eerste overeenkomende element terug dat ze tegenkomen.

Belangrijkste punten

  • Een sleutelfunctie koppelt één element aan zijn vergelijkingswaarde.
  • Geef de functie zelf door, zoals key=len of key=by_score.
  • Sleutelresultaten bepalen de volgorde zonder de oorspronkelijke elementen te vervangen.
  • Een tuplesleutel ordent op het eerste veld en gebruikt latere velden om de volgorde bij gelijke waarden te bepalen.
  • Door het tegengestelde van een numerieke sleutel te nemen, kun je alleen de richting van dat veld omkeren.
  • Stabiel sorteren behoudt de invoervolgorde bij gelijke sleutels.
  • min en max geven oorspronkelijke elementen terug en kiezen bij gelijke sleutels het eerste.

Lijsten en tuples in Python: voorbeelden

6 Walkthroughs

1

Lees de aantallen leveringen van een week

13 stappen
Maak een lijst, selecteer dagen en bereken veilig een gemiddelde.
  1. 1
    IntroductieHoud de aantallen op volgorde

    Een leveringslogboek bewaart één aantal per dag. Een lijst bewaart de volgorde, zodat een positie een dag aanduidt en een uitsnede meerdere dagen selecteert. Vervolgens kun je een totaal of gemiddelde van de geselecteerde waarden berekenen.

    Werk met deliveries = [12, 7, 15, 9, 17]. Dit zijn vijf dagaantallen in de volgorde waarin ze binnenkwamen. Volg eerst de posities, dan de uitsnedegrenzen en ten slotte het type resultaat dat elke bewerking oplevert.

  2. 2
    VoorbeeldKoppel aantallen aan posities

    De vijf aantallen staan op indices 0 tot en met 4:

    deliveries = [12, 7, 15, 9, 17]
    print(deliveries[0], deliveries[4])
    

    De uitvoer is 12 17. len(deliveries) is 5, maar index 5 bestaat niet. Een aantal vertelt hoeveel posities er zijn; het duidt niet de laatste aan. Het laatste aantal kun je ook uitlezen als deliveries[-1], met een negatieve index vanaf het einde.

  3. 3
    TipControleer een waarde voordat je die gebruikt

    Een lidmaatschapscontrole beantwoordt een andere vraag dan indexering:

    print(9 in deliveries)
    print(4 in deliveries)
    

    De uitvoer is eerst True en daarna False. De waarde 9 komt voor, maar 4 niet, ook al is 4 een geldige index. in controleert de opgeslagen waarden. Als je het aantal op positie 4 wilt, gebruik je deliveries[4], dat 17 teruggeeft.

  4. 4
    UitdagingZoek het voorlaatste aantal

    Wat geeft deliveries[-2] terug en zou deliveries[len(deliveries)] werken?

    ---reveal---

    De negatieve index -2 selecteert 9, één plaats vóór het laatste element 17. De tweede expressie probeert index 5 en veroorzaakt IndexError. Gebruik len(deliveries) - 1 of -1 om het laatste element te selecteren; het aantal elementen ligt één voorbij de laatste niet-negatieve index.

  5. 5
    VoorbeeldSelecteer de middelste drie dagen

    Gebruik index 1 als startwaarde en index 4 als uitgesloten eindgrens:

    middle = deliveries[1:4]
    print(middle)
    

    De uitvoer is [7, 15, 9]. De geselecteerde posities zijn 1, 2 en 3. Positie 4 bevat 17, maar vormt hier de eindgrens. middle is een nieuwe lijst, dus als je posities in de buitenste lijst wijzigt, vervang je geen positie in deliveries.

  6. 6
    UitlegLaat een grens weg

    deliveries[:2] geeft [12, 7], de eerste twee dagen. deliveries[2:] geeft [15, 9, 17], alle resterende dagen. Beide uitsneden sluiten bij grens 2 op elkaar aan, dus als je ze samenvoegt, krijg je de oorspronkelijke inhoud terug.

    deliveries[-2:] geeft [9, 17]. Een negatieve grens telt vanaf het einde. deliveries[20:] is []: een uitsnedegrens buiten het bereik wordt teruggebracht tot het uiteinde, anders dan bij het opzoeken van een element buiten het bereik.

  7. 7
    VoorbeeldDoorloop om de dag

    Een derde uitsnedeveld bepaalt de afstand:

    print(deliveries[::2])
    print(deliveries[::-1])
    

    De uitvoer is eerst [12, 15, 17] en daarna [17, 9, 15, 7, 12]. Stapgrootte 2 doorloopt indices 0, 2 en 4. Stapgrootte -1 doorloopt elk element achteruit. Beide resultaten zijn nieuwe lijsten. Een stapgrootte van nul kan niet verdergaan en veroorzaakt ValueError.

  8. 8
    UitdagingMaak onderscheid tussen een aantal en een lijst

    Wat zijn de waarden en typen van deliveries[2] en deliveries[2:3]?

    ---reveal---

    deliveries[2] is het gehele getal 15. deliveries[2:3] is de lijst [15]. De uitsnede selecteert één positie, maar geeft nog steeds een lijst terug. Dit verschil is van belang als de volgende bewerking een numeriek aantal verwacht: 1 optellen bij het gehele getal werkt, terwijl 1 rechtstreeks bij de lijst optellen TypeError veroorzaakt.

  9. 9
    VoorbeeldBereken een gemiddelde van de uitsnede

    De middelste uitsnede is [7, 15, 9]. Tel de elementen op en deel door de lengte:

    total = sum(middle)
    mean = total / len(middle)
    print(total)
    print(mean)
    

    De uitvoer is eerst 31 en daarna 10.333333333333334. Het totaal is 7 + 15 + 9 en de deler is 3. / levert een zwevendekommaresultaat op, dus wordt dit gemiddelde weergegeven met een decimale benadering.

  10. 10
    KernpuntVerwerk een selectie zonder dagen

    Een uitsnede kan leeg zijn, dus heeft een gemiddelde een beschermende voorwaarde nodig:

    selected = deliveries[20:]
    if selected:
        print(sum(selected) / len(selected))
    else:
        print("No days selected")
    

    Dit toont No days selected. Lege lijsten gelden als onwaar. Hoewel sum([]) gelijk is aan 0, zou je door nul delen als je dat totaal door len([]) deelt. Ook min en max gaan mis bij deze lege invoer.

  11. 11
    VerbandMaak een regel voor weergave

    Voor een weergave zijn strings nodig, geen lijst met gehele getallen:

    pieces = []
    for count in deliveries:
        pieces.append(str(count))
    print(", ".join(pieces))
    

    De uitvoer is 12, 7, 15, 9, 17. join wordt aangeroepen op de scheidingstekst en plaatst die tussen de elementen. De lijst met getallen rechtstreeks doorgeven zou misgaan, omdat elk samengevoegd element een string moet zijn. split werkt de andere kant op en verdeelt tekst in delen die strings zijn.

  12. 12
    UitdagingSelecteer, tel op en behoud het origineel

    Wat toont deze code?

    selected = deliveries[-3:]
    selected[0] = 0
    print(sum(selected), deliveries[2])
    

    ---reveal---

    De code toont 26 15. De uitsnede begint als [15, 9, 17], waarna de eerste positie wordt vervangen en [0, 9, 17] ontstaat. Die waarden tellen op tot 26. De buitenste lijst van de uitsnede is afzonderlijk, dus blijft het oorspronkelijke aantal op deliveries[2] gelijk aan 15.

  13. 13
    SamenvattingKies het resultaat dat je nodig hebt

    Lees één positie voor een afzonderlijk aantal, gebruik een uitsnede voor een sequentie en gebruik functies voor kengetallen voor totalen of uitersten. Een uitsnede van een lijst maakt een nieuwe buitenste lijst.

    Verwerk eerst het geval dat een selectie leeg is voordat je het gemiddelde berekent. Zet bij het maken van weergavetekst numerieke waarden om in strings voordat je ze samenvoegt.

2

Bewerk een aanvraag voor benodigdheden

10 stappen
Voeg artikelen toe, verwijder, zoek en vervang ze en volg tegelijk de resultaten van methoden.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieVolg de lijst en de teruggegeven waarde
  2. 2
    VoorbeeldVoeg een groep artikelen toe
  3. 3
    VoorbeeldPlaats één artikel vooraan
  4. 4
    VoorbeeldVerwijder en bewaar een opgehaald artikel
  5. 5
    UitdagingKies voor verwijderen op waarde
  6. 6
    VoorbeeldZoek de positie voor een correctie
  7. 7
    VoorbeeldVervang één artikel door een groep
  8. 8
    UitdagingVerwijder een bereik en zoek een waarde
  9. 9
    UitdagingRond de aanvraag af zonder die te verliezen
  10. 10
    SamenvattingKies de bewerking die bij de wijziging past
3

Schoon metingen op en tel een tabel op

13 stappen
Kies lusvormen, bouw een resultaat op en verwerk rijen met verschillende lengtes.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBepaal wat elke lus bijhoudt
  2. 2
    UitlegLees een waarde zonder de positie te wijzigen
  3. 3
    VoorbeeldVervang ongeldige metingen via hun index
  4. 4
    VerbandKoppel labels aan metingen
  5. 5
    UitdagingVerklaar een overgeslagen element
  6. 6
    VoorbeeldTel de positieve metingen
  7. 7
    VoorbeeldMaak een gefilterd en getransformeerd resultaat
  8. 8
    TipZoek tot de eerste overeenkomst
  9. 9
    UitdagingKies een geldig maximum
  10. 10
    VoorbeeldSelecteer een rij en een cel
  11. 11
    VoorbeeldTel alle rijen op
  12. 12
    UitdagingFilter over de hele tabel
  13. 13
    SamenvattingHoud voorbereiding gescheiden van herhaald werk
4

Gebruik een vast record en pak de velden uit

10 stappen
Volg tupleposities, uitpakken met een sterretje, verwisselingen en teruggegeven paren.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieHoud een record bij elkaar
  2. 2
    VoorbeeldMaak het stationrecord
  3. 3
    KernpuntToets de grens van onwijzigbaarheid
  4. 4
    UitdagingMaak een tuple met één element
  5. 5
    VoorbeeldGeef elk veld een naam
  6. 6
    VoorbeeldBewaar de eerste meting en de rest
  7. 7
    UitdagingVerwissel coördinaatwaarden
  8. 8
    VoorbeeldGeef een paar uitersten terug
  9. 9
    UitdagingLees één geselecteerd veld en pak het uit
  10. 10
    SamenvattingLees de structuur voordat je uitpakt
5

Volg een gekopieerde tabel door een functie

14 stappen
Maak onderscheid tussen aliassen, ondiepe kopieën, diepe kopieën en wijzigingen aan lokale parameters.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieTeken paden naar objecten
  2. 2
    VoorbeeldMaak een alias
  3. 3
    VoorbeeldLaat één naam ergens anders naar verwijzen
  4. 4
    UitdagingVoorspel twee soorten optelling
  5. 5
    VoorbeeldKopieer de buitenste tabel
  6. 6
    VoorbeeldWijzig een gedeelde rij
  7. 7
    KernpuntVervang een gekopieerde rij
  8. 8
    UitdagingKies een diepere kopie
  9. 9
    VoorbeeldWijzig via een parameter
  10. 10
    VerbandGeef een afzonderlijke lijst terug
  11. 11
    UitlegVoorkom een blijvende standaardwinkelmand
  12. 12
    UitdagingMaak onderscheid tussen lokaal herbinden en leegmaken
  13. 13
    UitdagingVolg een ondiepe kopie die aan een functie wordt doorgegeven
  14. 14
    SamenvattingVolg het niveau dat wordt gewijzigd
6

Rangschik records zonder hun volgorde van binnenkomst te verliezen

13 stappen
Sorteer een kopie, kies sleutels, bepaal de volgorde bij gelijke waarden en behoud de volgorde bij gelijke sleutels.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMaak onderscheid tussen opgeslagen gegevens en vergelijkingssleutels
  2. 2
    VoorbeeldBehoud de volgorde van binnenkomst
  3. 3
    VoorbeeldVergelijk omkeren met aflopend sorteren
  4. 4
    TipControleer het invoertype
  5. 5
    UitdagingVolg een sorteerresultaat
  6. 6
    VoorbeeldKies een scoresleutel
  7. 7
    KernpuntBehoud bij gelijke scores de volgorde van binnenkomst
  8. 8
    UitdagingGeef een aanroepbaar object door
  9. 9
    VoorbeeldVoeg een alfabetisch aanvullend sorteercriterium toe
  10. 10
    TipKeer alleen de numerieke richting om
  11. 11
    VerbandKies een element op basis van een uiterste sleutel
  12. 12
    UitdagingBehoud de oorspronkelijke vorm van records en namen
  13. 13
    SamenvattingKies het effect en de regel

Lijsten en tuples in Python: oefenvragen

60 Oefenvragen in 6 sets

Set 1: Pak records uit en volg gedeelde objecten10 Oefenvragen

Vraag 1 van 10

Wat toont deze code?

a = [2, 6]
b = a.copy()
b[0] = 10
print(a, b)
  1. [10, 6] [10, 6]
  2. [2, 6] [2, 6]
  3. [10, 6] [2, 6]
  4. [2, 6] [10, 6]
Toon antwoordVerberg antwoord
Antwoord: D
copy() maakt een nieuwe buitenste lijst. Toekennen aan b[0] vervangt een positie in die nieuwe lijst en laat a ongewijzigd. Na b = a zouden beide lijsten de vervanging tonen, maar de expliciete kopie maakt hun buitenste posities onafhankelijk.

Vraag 2 van 10

Een programma heeft een dictionarysleutel nodig die rij 3 en kolom 7 voorstelt. Welke waarde kan het als coördinatensleutel gebruiken?
  1. [3, 7]
  2. (3, 7)
  3. ([3], 7)
  4. (3, [7])
Toon antwoordVerberg antwoord
Antwoord: B
De tuple (3, 7) bevat gehele getallen, dus is hij hashbaar en kan hij een dictionarysleutel zijn. Een lijst kan geen sleutel zijn en een lijst in een tuple verpakken lost dat niet op: ook de inhoud van de tuple moet hashbaar zijn. Vaste coördinatentuples zijn geschikt voor dit gebruik.

Vraag 3 van 10

Welke waarde bevat amount na label, amount = ("rice", 4)?
  1. 'rice'
  2. (4,)
  3. ('rice', 4)
  4. 4
Toon antwoordVerberg antwoord
Antwoord: D
Uitpakken kent de elementen op volgorde toe: het eerste element gaat naar label en het tweede naar amount. Het tweede element is het gehele getal 4. Het wordt niet in een tuple met één element verpakt; dat zou een andere waarde zijn dan het element dat in dit record is opgeslagen.

Vraag 4 van 10

Wat is middle na first, *middle, last = (2, 5, 8, 11, 14)?
  1. (5, 8, 11)
  2. [5, 8, 11]
  3. [2, 5, 8, 11]
  4. [5, 8, 11, 14]
Toon antwoordVerberg antwoord
Antwoord: B
De namen zonder sterretje krijgen het eerste en laatste element, 2 en 14. De naam met het sterretje verzamelt de resterende waarden in [5, 8, 11]. Een tuple als invoer maakt de verzamelde waarde geen tuple; uitpakken met een sterretje maakt voor de resterende waarden altijd een lijst.

Vraag 5 van 10

Wat toont deze code?

a = [5, 8]
b = [5, 8]
print(a == b, a is b)
  1. True True
  2. False True
  3. True False
  4. False False
Toon antwoordVerberg antwoord
Antwoord: C
De twee lijstliterals maken afzonderlijke objecten met gelijke inhoud. Gelijkheid is daarom waar, terwijl identiteit onwaar is. Gelijke inhoud betekent niet dat de opslag wordt gedeeld; als je is gebruikt om lijstwaarden te vergelijken, verwar je de vraag of de elementen overeenkomen met de vraag of beide namen naar hetzelfde object verwijzen.

Vraag 6 van 10

Wat toont deze code?

record = ([2], "ready")
other = record
record[0].append(7)
print(other)
  1. ([2, 7], 'ready')
  2. ([2], 'ready')
  3. ([7], 'ready')
  4. ([2], 'ready', 7)
Toon antwoordVerberg antwoord
Antwoord: A
Beide namen verwijzen naar dezelfde tuple, waarvan het eerste element een wijzigbare lijst is. Toevoegen wijzigt die binnenlijst, dus toont other de waarde ([2, 7], 'ready'). De onwijzigbaarheid van de tuple voorkomt dat een tuplepositie wordt vervangen; ze voorkomt niet dat het object dat al op die positie is opgeslagen, verandert.

Vraag 7 van 10

Wat toont deze code?

a = [4]
b = a
a += [9]
a = a + [12]
print(a, b)
  1. [4, 9, 12] [4]
  2. [4, 9, 12] [4, 9, 12]
  3. [4, 9, 12] [4, 9]
  4. [4, 9] [4, 9, 12]
Toon antwoordVerberg antwoord
Antwoord: C
+= breidt eerst de gedeelde lijst uit, dus bereiken beide namen [4, 9]. De latere + maakt een nieuwe lijst en herbindt alleen a, waardoor die [4, 9, 12] krijgt. b behoudt de al uitgebreide oude lijst; als je beide bewerkingen als kopiëren of allebei als wijzigen beschouwt, mis je een van de stappen.

Vraag 8 van 10

Wat toont deze code?

def bounds(values):
    return min(values), max(values)

low, high = bounds([18, 5, 12])
low, high = high, low
print(low, high)
  1. 18 5
  2. 5 18
  3. 18 18
  4. 5 5
Toon antwoordVerberg antwoord
Antwoord: A
De functie geeft (5, 18) terug, dat wordt uitgepakt in low en high. De volgende toekenning evalueert beide oude waarden voordat de namen worden verwisseld, dus is de uitvoer 18 5. Beide namen zouden 18 worden met twee opeenvolgende overschrijvende toekenningen, maar gelijktijdig uitpakken behoudt beide waarden.

Vraag 9 van 10

Wat toont deze code?

a = [[4], [8]]
b = a.copy()
b[0].append(6)
b[1] = [9]
print(a)
  1. [[4], [8]]
  2. [[4, 6], [9]]
  3. [[4], [9]]
  4. [[4, 6], [8]]
Toon antwoordVerberg antwoord
Antwoord: D
De ondiepe kopie deelt de oorspronkelijke binnenlijsten, dus verandert een toevoeging aan b[0] ook a[0]. Het vervangen van b[1] verandert alleen een positie in de gekopieerde buitenste lijst; a[1] blijft [8]. Als je beide wijzigingen in a zichtbaar maakt, verwar je een mutatie van een binnenlijst met vervanging in de buitenste lijst.

Vraag 10 van 10

Wat toont deze code?

row = [1, 2]
table = [row, row]
row = [8, 9]
table[0][1] = 7
print(table, row)
  1. [[1, 7], [1, 7]] [8, 9]
  2. [[8, 7], [8, 7]] [8, 7]
  3. [[1, 7], [1, 2]] [8, 9]
  4. [[1, 2], [1, 2]] [8, 7]
Toon antwoordVerberg antwoord
Antwoord: A
Door row te herbinden ontstaat een referentie naar een nieuwe lijst, zonder dat een van de referenties die al in table staan ergens anders naar gaat verwijzen. De twee tabelposities delen nog steeds de oorspronkelijke rij. Een cel wijzigen via table[0] is daarom zichtbaar via table[1], terwijl de nieuwe row gelijk blijft aan [8, 9].
Set 2: Lees, selecteer en wijzig sequenties10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat is bij codes = [2, 5, 8, 11, 14, 17] de waarde van codes[1:5:2]?
  1. [5, 11]
  2. [5, 8, 11, 14]
  3. [5, 11, 17]
  4. [2, 8, 14]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat is bij levels = [14, 29, 37, 52] de waarde van levels[-2]?
  1. 29
  2. 52
  3. 37
  4. 14
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welke lijst ontstaat door deze code?

items = ["pen"]
items.append(["clip", "pad"])
  1. ['pen', 'clip', 'pad']
  2. [['pen'], ['clip', 'pad']]
  3. ['pen', 'clip pad']
  4. ['pen', ['clip', 'pad']]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat toont deze code?

parts = "6|12|18".split("|")
print(len(parts), parts[1])
  1. 8 12
  2. 3 12
  3. 3 6
  4. 8 |
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat is len(values) na deze code?

values = [4, 7, 10, 13]
values[1:3] = [20, 21, 22]
  1. 4
  2. 5
  3. 6
  4. 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Hoe schrijf je een tuple die alleen het gehele getal 12 bevat?
  1. (12)
  2. [12]
  3. tuple(12)
  4. (12,)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Wat toont deze code?

queue = [18, 0, 24]
removed = queue.pop(0)
print(removed, queue)
  1. 18 [0, 24]
  2. 0 [18, 24]
  3. None [0, 24]
  4. 24 [18, 0]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat toont deze code?

a = [3, 6, 9, 12, 15]
b = a[-4:-1]
print(b[::-1][1])
  1. 6
  2. 12
  3. 9
  4. 15
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat gebeurt er bij items = [9, 16, 25] wanneer Python items[len(items)] evalueert?
  1. De expressie veroorzaakt IndexError.
  2. De expressie geeft het laatste element, 25.
  3. De expressie geeft het eerste element, 9.
  4. De expressie veroorzaakt TypeError.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat levert deze vergelijking op: [4, 99] < [5, 1]?
  1. False, omdat het tweede paar 99 en 1 is.
  2. False, omdat de eerste lijst het grootste totaal heeft.
  3. True, omdat beide lijsten dezelfde lengte hebben.
  4. True, omdat het eerste ongelijke paar 4 en 5 is.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Verwerk waarden, posities en tabellen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Welke lijst toont deze code?

values = [8, 3]
for value in values:
    value = 0
print(values)
  1. [0, 0]
  2. [8, 3]
  3. [0, 3]
  4. [8, 0]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welke waarde toont deze code?

count = 0
for size in [10, 7, 10, 13, 6]:
    if size >= 10:
        count += 1
print(count)
  1. 1
  2. 33
  3. 2
  4. 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat levert bij table = [[6, 8, 10], [11, 13, 15]] de expressie table[1][0] + table[0][2] op?
  1. 21
  2. 19
  3. 25
  4. 23
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Hoeveel paren bevat list(zip(["Lee", "Mo", "Nia"], [41, 56]))?
  1. 3
  2. 5
  3. 2
  4. 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat wordt getoond?

values = [7, -4, -8, 2]
position = -1
for i, value in enumerate(values):
    if value < 0:
        position = i
        break
print(position, values[position])
  1. 2 -8
  2. -1 2
  3. -4 1
  4. 1 -4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Hoe vaak wordt total += value uitgevoerd?

total = 0
for row in [[2, 4], [6], [8, 10, 12]]:
    for value in row:
        total += value
  1. 3
  2. 6
  3. 9
  4. 2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Welke lijst blijft over na deze code?

values = [0, 0, 1, 0]
for value in values:
    if value == 0:
        values.remove(value)
  1. [1]
  2. [0, 0, 1]
  3. [1, 0]
  4. [0, 1]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een lus moet de grootste waarde vinden in de niet-lege lijst [-14, -6, -19]. Waarmee moet het lopende maximum worden geïnitialiseerd?
  1. Het eerste element, -14.
  2. Het getal nul, 0.
  3. De lengte van de lijst, 3.
  4. De eerste index, 0.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat toont deze code?

kept = []
for text in ["4", "15", "8", "21"]:
    number = int(text)
    if number % 2 == 0:
        kept.append(number + 1)
print(kept)
  1. [4, 8]
  2. [5, 9]
  3. [5, 16, 9, 22]
  4. [16, 22]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Welke tabel ontstaat?

table = []
for r in range(2):
    table.append([0] * 2)
table[1][0] = 6
  1. [[6, 0], [6, 0]]
  2. [[0, 6], [0, 0]]
  3. [[0, 0], [6, 0]]
  4. [[0, 0], [0, 6]]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Beheers wijzigingen bij functieaanroepen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat geeft tags.count("done") terug bij tags = ["new", "old", "new"]?
  1. 0
  2. -1
  3. None
  4. ValueError
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat toont deze code?

def reset(values):
    values = []

values = [11, 22]
reset(values)
print(values)
  1. []
  2. None
  3. [11, 22]
  4. [0, 0]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat toont deze code?

import copy
a = [[3], [7]]
b = copy.deepcopy(a)
b[0].append(5)
print(a, b[0] is a[0])
  1. [[3, 5], [7]] True
  2. [[3], [7]] False
  3. [[3], [7]] True
  4. [[3, 5], [7]] False
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat toont de laatste regel?

def collect(item, items=[]):
    items.append(item)
    return items

first = collect("x")
second = collect("y")
print(first is second, first)
  1. False ['x']
  2. True ['x']
  3. False ['x', 'y']
  4. True ['x', 'y']
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat toont deze code?

def trim(values):
    del values[0]

items = [6, 9, 12]
result = trim(items)
print(items, result)
  1. [9, 12] None
  2. [6, 9, 12] [9, 12]
  3. [9, 12] [9, 12]
  4. None [9, 12]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat toont deze code?

def change(values):
    values.append(8)
    values = [0]
    return values

original = [3]
result = change(original)
print(original, result)
  1. [0] [0]
  2. [3, 8] [0]
  3. [3] [0]
  4. [3, 8] [3, 8]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Welke tabel ontstaat?

table = [[0] * 2] * 3
table[2][1] = 4
table[0] = [9, 9]
  1. [[9, 9], [0, 0], [0, 4]]
  2. [[9, 9], [9, 9], [9, 9]]
  3. [[0, 4], [0, 4], [0, 4]]
  4. [[9, 9], [0, 4], [0, 4]]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat is bij codes = ["q", "r", "q", "s", "q"] de waarde van codes.index("q", 1)?
  1. 0
  2. 1
  3. 2
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat wordt getoond?

def add(item, values=None):
    if values is None:
        values = []
    values.append(item)
    return values

a = add(4)
b = add(7)
c = add(9, a)
print(a, b, c is a)
  1. [4, 7, 9] [4, 7, 9] True
  2. [4] [7] False
  3. [4, 9] [7] True
  4. [4, 9] [7, 9] False
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat toont deze code?

def edit(rows):
    rows[0].append(5)
    rows.append([9])

original = [[1], [2]]
edit(original[:])
print(original)
  1. [[1], [2]]
  2. [[1, 5], [2]]
  3. [[1, 5], [2], [9]]
  4. [[1], [2], [9]]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Kies sorteerregels en bepaal de volgorde bij gelijke waarden10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat toont deze code?

a = [9, 4, 7]
b = a
c = sorted(a)
a.reverse()
print(b, c)
  1. [7, 4, 9] [4, 7, 9]
  2. [4, 7, 9] [4, 7, 9]
  3. [9, 4, 7] [4, 7, 9]
  4. [7, 4, 9] [9, 7, 4]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welke waarde bevat result na nums = [8, 2, 5] en result = nums.sort()?
  1. [2, 5, 8]
  2. [8, 5, 2]
  3. None
  4. [8, 2, 5]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat geeft sorted(["20", "3", "11"]) terug?
  1. ['3', '11', '20']
  2. ['20', '3', '11']
  3. ['3', '20', '11']
  4. ['11', '20', '3']
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat geeft sorted(["pear", "a", "plum", "to"], key=len) terug?
  1. ['a', 'to', 'plum', 'pear']
  2. ['a', 'to', 'pear', 'plum']
  3. ['a', 'pear', 'plum', 'to']
  4. ['pear', 'plum', 'to', 'a']
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welk paar resultaten geven bij values = [6, 1, 4] achtereenvolgens values[::-1] en sorted(values, reverse=True)?
  1. [4, 1, 6] en [6, 4, 1]
  2. [6, 4, 1] en [4, 1, 6]
  3. [4, 1, 6] en [4, 1, 6]
  4. [6, 4, 1] en [6, 4, 1]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Records zijn paren (name, score). Welke inhoud van een sleutelfunctie plaatst hogere scores eerst en namen van A tot Z bij gelijke scores?
  1. return (record[1], record[0])
  2. return (record[0], -record[1])
  3. return (-record[1], len(record[0]))
  4. return (-record[1], record[0])
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Welke volgorde levert deze code op?

records = [("Zoe", 8), ("Ali", 8), ("Mia", 6)]
def by_score(record):
    return record[1]
print(sorted(records, key=by_score, reverse=True))
  1. [('Ali', 8), ('Zoe', 8), ('Mia', 6)]
  2. [('Mia', 6), ('Zoe', 8), ('Ali', 8)]
  3. [('Zoe', 8), ('Ali', 8), ('Mia', 6)]
  4. [('Zoe', 8), ('Mia', 6), ('Ali', 8)]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat toont deze code?

words = ["oak", "elm", "pine", "ash"]
print(max(words, key=len), min(words, key=len))
  1. pine oak
  2. pine ash
  3. 4 3
  4. pine elm
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat toont deze code?

words = ["beta", "Alpha", "alpha", "Beta"]
print(sorted(words, key=str.lower))
  1. ['beta', 'Beta', 'Alpha', 'alpha']
  2. ['Alpha', 'alpha', 'beta', 'Beta']
  3. ['Alpha', 'beta', 'alpha', 'Beta']
  4. ['Alpha', 'Beta', 'beta', 'alpha']
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een programma sorteert records (name, score) eerst op naam van A tot Z. Daarna sorteert het ze stabiel op score, van hoog naar laag. Hoe staan records met gelijke scores in de uiteindelijke lijst?
  1. Op naam van Z tot A binnen elke groep met gelijke scores.
  2. Op naam van A tot Z vóór alle vergelijkingen van scores.
  3. Op volgorde van vóór beide sorteerbewerkingen.
  4. Op naam van A tot Z binnen elke groep met gelijke scores.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 6: Debug en combineer sequentiebewerkingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat is bij values = [12, 24] de waarde van values[5:20]?
  1. IndexError
  2. []
  3. [24]
  4. [12, 24]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een lijst met getallen kan leeg zijn. Hoe kan een functie het gemiddelde teruggeven als er waarden zijn en anders None?
  1. Toets if not values: return None en geef daarna sum(values) / len(values) terug.
  2. Toets if not values: return 0 en geef daarna sum(values) / len(values) terug.
  3. Geef sum(values) / len(values) terug voordat je toetst of de lijst leeg is.
  4. Toets if values: return None en geef daarna sum(values) / len(values) terug.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat toont deze code?

items = [1, 2]
result = items.extend([3, 4])
print(len(items), result)
  1. 3 None
  2. 4 [1, 2, 3, 4]
  3. 2 [3, 4]
  4. 4 None
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat toont deze code?

records = [("A", 4), ("B", 9)]
amounts = []
for _, amount in records:
    amounts.append(amount)
first, *rest = amounts[::-1]
print(first, rest)
  1. 4 [9]
  2. 9 (4,)
  3. 9 [4]
  4. [9] 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat toont deze code?

values = [5, -2, 8, -4]
for i, value in enumerate(values):
    if value < 0:
        values[i] = -value
print(values[1::2])
  1. [2, 4]
  2. [-2, -4]
  3. [5, 8]
  4. [5, 2, 8, 4]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat toont deze code?

a = [[9, 2], [8, 1]]
b = a[:]
b.reverse()
b[0][0] = 6
print(a)
  1. [[6, 1], [9, 2]]
  2. [[9, 2], [8, 1]]
  3. [[9, 2], [6, 1]]
  4. [[6, 2], [8, 1]]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Wat toont deze code?

records = [("Rae", 7), ("Dev", 9), ("Cam", 7)]
def rank(record):
    return (-record[1], record[0])
ordered = sorted(records, key=rank)
name, score = ordered[1]
print(name, score)
  1. Rae 7
  2. Cam 7
  3. Dev 9
  4. Cam -7
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat toont deze code?

def select(values):
    kept = []
    for value in values:
        if value >= 5:
            kept.append(value * 2)
    return kept

a = [3, 5, 8]
b = select(a)
b.pop(0)
print(a, b)
  1. [3, 5, 8] [10, 16]
  2. [5, 8] [16]
  3. [3, 5, 8] [10]
  4. [3, 5, 8] [16]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een niet-lege lijst met oneven lengte is [31, 12, 27, 18, 24, 15, 21]. Wat is de middelste waarde na het sorteren van een kopie?
  1. 18
  2. 21
  3. 24
  4. 27
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat toont deze code?

point = (6, 8)
old = point
point = (10,) + point[1:]
print(old, point)
  1. (6, 8) (10, 8)
  2. (10, 8) (10, 8)
  3. (6, 8) (6, 10)
  4. (6, 8) (10,)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

73 Kernbegrippen, elk met een definitie

A

aanvullend sorteercriterium
Een aanvullend sorteercriterium is een secundaire vergelijkingsregel die wordt gebruikt als een eerdere regel gelijke sleutels geeft, zoals namen vergelijken na gelijke scores.
Twee records met score 80 kunnen op naam worden geordend als de sleutel die naam na de score bevat.
accumulator
Een accumulator is een variabele die een lopend resultaat tussen lusdoorgangen bewaart, zoals een totaal dat wordt bijgewerkt door elk element op te tellen.
Stel vóór het verwerken van metingen total = 0 in en gebruik daarna total += reading om eerdere optellingen te behouden.
aflopende volgorde
Aflopende volgorde plaatst grotere vergelijkingswaarden vóór kleinere en wordt aangevraagd met de benoemde sorteeroptie reverse=True.
Aflopend sorteren van [5, 1, 8] geeft [8, 5, 1]; alleen de posities omkeren geeft [8, 1, 5].
alias
Een alias is een andere naam of referentie voor hetzelfde object, waardoor een mutatie via het ene pad zichtbaar kan zijn via een ander pad.
Als current = queue, verandert een toevoeging via current ook de lijst die via queue wordt bereikt.
append()
De lijstmethode append() voegt haar argument als één element toe aan het einde van de bestaande lijst en geeft None terug.
[3, 4] toevoegen aan [1, 2] met append levert [1, 2, [3, 4]] op, omdat het argument één element blijft.

B

bewerking ter plaatse
Een bewerking ter plaatse wijzigt een bestaand object, zodat via andere referenties naar dat object dezelfde gewijzigde toestand zichtbaar is.
values.clear() maakt de bestaande lijst leeg, zodat elke alias ziet dat die lijst leeg wordt.
buitenste lijst
Een buitenste lijst is de container die binnenste objecten bevat; één positie ervan wijzigen verschilt van het object op die positie wijzigen.
b[0] = [9] vervangt een rijreferentie, terwijl b[0].append(9) het bestaande rijobject wijzigt.

C

cel
Een cel is één waarde in een tabel, die je bereikt door eerst de rij en daarna de positie binnen die rij te selecteren.
grid[0][2] = 9 vervangt de derde cel van de eerste rij, mits die positie al bestaat.
concatenatie
Concatenatie voegt sequenties achter elkaar; concatenatie van lijsten met + maakt uit twee lijsten een nieuwe buitenste lijst.
morning + afternoon kan twee lijsten met metingen combineren en beide oorspronkelijke lijsten intact laten.
count()
De lijstmethode count() geeft het aantal elementen terug dat gelijk is aan haar argument en geeft 0 terug als de waarde ontbreekt.
[2, 2.0, 5].count(2) is 2 omdat zowel het gehele getal 2 als het zwevendekommagetal 2,0 bij vergelijking gelijk is aan 2.

D

diepe kopie
Een diepe kopie dupliceert een geneste structuur recursief, zodat wijzigingen aan gekopieerde binnenlijsten de oorspronkelijke binnenlijsten niet bereiken.
copy.deepcopy(rows) kan oorspronkelijke tabelcellen behouden terwijl een afzonderlijke geneste structuur wordt gewijzigd.

E

element
Een element is één waarde op een positie in een collectie; een geneste lijst telt als één element van de buitenste lijst.
In ["desk", ["pen", "pad"]] heeft de buitenste lijst twee elementen, ook al bevat de binnenlijst twee strings.
elementtoekenning
Elementtoekenning vervangt het object op een bestaande positie in een wijzigbare sequentie en laat de lengte van de buitenste sequentie onveranderd.
prices[1] = 6.5 corrigeert één vastgelegde prijs; de toekenning kan geen element maken op index len(prices).
enumerate()
De ingebouwde functie enumerate() levert paren met een oplopend nummer en een element, standaard beginnend met nummer 0.
for i, value in enumerate(values): geeft de code zowel een index als het bijbehorende huidige element.
exclusieve eindgrens
Een exclusieve eindgrens is het uitgesloten eindpunt van een uitsnede; de geselecteerde posities eindigen vóór die grens in de richting van de stapgrootte.
In values[2:5] geeft index 5 aan waar de selectie stopt en levert die geen element.
extend()
De lijstmethode extend() voegt elk element van een itereerbaar object toe aan het einde van de bestaande lijst en geeft None terug.
[1, 2] uitbreiden met [3, 4] levert vier elementen in de buitenste lijst op; uitbreiden met "ab" voegt twee tekens toe.

F

filteren
Filteren bouwt een collectie op van elementen die aan een voorwaarde voldoen en laat elementen weg die niet aan die voorwaarde voldoen.
Een lus kan alleen scores van minstens 60 toevoegen aan een nieuwe lijst en daarbij de oorspronkelijke scorevolgorde behouden.

G

gedeelde rij
Een gedeelde rij is één binnenlijst waarnaar meerdere tabelposities verwijzen, zodat een celwijziging in meer dan één weergegeven rij zichtbaar kan zijn.
table = [row, row] slaat één rij twee keer op, hoewel het afdrukken van de tabel twee rijposities toont.
gelijktijdige verwisseling
Een gelijktijdige verwisseling evalueert beide oude waarden voordat ze in één uitpakinstructie aan de tegenovergestelde namen worden toegekend.
left, right = right, left behoudt beide waarden zonder een afzonderlijk benoemde tijdelijke waarde.
geneste lijst
Een geneste lijst is een lijst die andere lijsten bevat; elke binnenlijst is een element dat afzonderlijk kan worden benaderd en verwerkt.
In [[2, 5], [7]] bevat de buitenste lijst twee rijen met lengtes twee en één.
geneste lus
Een geneste lus is een lus binnen een andere lus; de binnenste lus voltooit haar werk bij elke doorgang van de buitenste lus.
Een rijenlus met daarin een cellenlus kan tabellen verwerken met verschillende aantallen elementen per rij.

H

hashbare waarde
Een hashbare waarde ondersteunt de vaste opzoekregels die nodig zijn voor dictionarysleutels; tuples vereisen hashbare inhoud en lijsten zijn niet hashbaar.
(5, 9) kan een coördinatensleutel zijn, maar ([5], 9) niet omdat de binnenlijst niet hashbaar is.
herbinden
Herbinden verandert het object waarnaar een naam verwijst zonder andere namen die naar het vorige object verwezen ergens anders naar te laten verwijzen.
Na b = a geeft de toekenning b = [] aan b een nieuwe lijst, terwijl a naar het origineel blijft verwijzen.
herhaling
Herhaling gebruikt * met een geheel getal om de elementreferenties van een sequentie op volgorde te herhalen en levert bij aantallen van nul of minder een lege sequentie op.
[0] * 5 maakt vijf tellerposities, terwijl herhaling van een rijlijst gedeelde binnenste rijen kan maken.
hoofdletterongevoelige sorteersleutel
Een hoofdletterongevoelige sorteersleutel vergelijkt genormaliseerde tekstwaarden en behoudt tegelijk de oorspronkelijke schrijfwijze van elke string in de teruggegeven collectie.
Met key=str.lower worden "Oak" en "oak" als gelijk vergeleken zonder hun hoofdletters te veranderen.

I

identiteit
Identiteit is de eigenschap hetzelfde object te zijn, getoetst met is; gelijke inhoud kan bij verschillende lijstobjecten horen.
Twee afzonderlijke literals [1, 3] zijn bij vergelijking gelijk, maar een identiteitscontrole tussen die lijsten is onwaar.
index
Een index is een positie als geheel getal waarmee je een element selecteert; Python telt vanaf 0 aan het begin of vanaf -1 aan het einde.
Bij colors = ["blue", "gold"] selecteert index 1 de waarde 'gold', die ook op index -1 staat.
index()
De lijstmethode index() vindt het eerste gelijke element in haar zoekbereik en geeft de index van dat element in de hele lijst terug.
labels.index("go", 2) begint met zoeken op positie 2, maar telt het antwoord nog steeds vanaf positie 0.
inpakken
Inpakken verzamelt meerdere expressiewaarden in één tuple, meestal met komma’s zonder dat omliggende haakjes nodig zijn.
result = lowest, highest slaat beide waarden op in een tuple die vanuit een functie kan worden teruggegeven.
insert()
De lijstmethode insert() voegt een element vóór een opgegeven positie toe, schuift latere elementen op en vergroot de lengte van de lijst.
queue.insert(0, "urgent") plaatst een nieuw element vooraan zonder het eerdere eerste element te overschrijven.
iteratie
Iteratie is het herhaald verwerken van elementen die één voor één worden geleverd, zoals een for-lus die een lijst van het eerste tot het laatste element doorloopt.
Een lus over names kent elke huidige naam toe aan de lusvariabele voordat de lusinhoud wordt uitgevoerd.
itereerbaar object
Een itereerbaar object is een object dat elementen één voor één kan leveren aan een lus of aan een functie zoals list().
Een getallenbereik levert getallen, dus verzamelt list(range(3)) die in de nieuwe lijst [0, 1, 2].

J

join()
De stringmethode join() voegt opgegeven strings samen tot één string en plaatst de string waarop ze wordt aangeroepen tussen de elementen.
" / ".join(["red", "blue"]) maakt 'red / blue'; numerieke elementen moeten eerst naar strings worden omgezet.

L

lexicografische volgorde
Lexicografische volgorde vergelijkt sequenties van links naar rechts: het eerste ongelijke paar beslist, of een overeenkomende kortere sequentie komt eerst.
[3, 20] < [4, 1] is waar omdat de eerste elementen de volgorde bepalen voordat de tweede worden vergeleken.
lidmaatschapscontrole
Een lidmaatschapscontrole toetst of een gelijke waarde in een collectie voorkomt en geeft via in of not in een booleaans resultaat terug.
"ready" in statuses kan bepalen of een lijst precies die statusstring bevat, met onderscheid tussen hoofdletters en kleine letters.
lijst
Een lijst is een geordende, wijzigbare collectie waarvan je de elementen op positie kunt uitlezen en die herhaalde waarden of verschillende typen kan bevatten.
Een programma kan meerdere quizresultaten opslaan in scores = [73, 91, 73] en samen verwerken.
lijstparameter
Een lijstparameter is een lokale functienaam die aanvankelijk naar het lijstobject van de aanroepende code verwijst, zodat de functie dat object kan wijzigen.
Een functie die values.clear() aanroept, maakt de lijst van de aanroepende code leeg; de toekenning values = [] doet dat niet.
lopend maximum
Een lopend maximum is het grootste element dat tot dan toe is gezien, geïnitialiseerd met een werkelijk element en vervangen zodra een groter element langskomt.
Door met de eerste meting te beginnen, vindt dit patroon ook correct de grootste waarde als alle metingen negatief zijn.
lusvariabele
Een lusvariabele is een naam die bij elke doorgang aan het huidige element wordt gebonden; die naam herbinden kent niets toe aan de oorspronkelijke lijst.
In for value in values: value = 0 verandert de lusnaam, maar de opgeslagen lijstposities veranderen niet.

M

mediaan
De mediaan is de middelste waarde in gesorteerde gegevens; bij een niet-lege lijst met oneven lengte is dat het element op index len(ordered) // 2.
Sorteren van [5, 12, 2] geeft [2, 5, 12], waardoor de mediaan 5 op de middelste index 1 staat.
methode
Een methode is een functie die bij een object hoort en via puntnotatie wordt aangeroepen om een bewerking op dat object uit te voeren.
queue.append("next") roept de methode van de lijst aan en geeft het toe te voegen element als argument mee.
mutatie
Een mutatie wijzigt de inhoud of toestand van een bestaand object, zodat via elke referentie naar dat object dezelfde wijziging zichtbaar kan zijn.
items[0] = 7 wijzigt de lijst; elke alias van die lijst ziet dat de eerste positie 7 wordt.

N

naam met een sterretje
Een naam met een sterretje verzamelt bij uitpakken alle waarden die niet aan de doelen zonder sterretje zijn toegekend en krijgt altijd een lijst.
In first, *rest = (4, 8, 12) is rest gelijk aan [8, 12], ook al is de invoer een tuple.
None als standaardwaarde
Een standaardwaarde None kan een weggelaten lijstargument aanduiden, zodat een functie voor elke aanroep met de standaardwaarde binnen haar inhoud een nieuwe lijst maakt.
Bij values=None voorkomt de tak if values is None: values = [] een onbedoeld gedeelde standaardlijst.

O

omkering
Omkering draait de bestaande volgorde van een sequentie om zonder posities op waarde te kiezen en hoeft dus geen oplopende of aflopende volgorde op te leveren.
values.reverse() wijzigt een lijst, terwijl values[::-1] een omgekeerde ondiepe kopie maakt.
ondiepe kopie
Een ondiepe kopie maakt een nieuwe buitenste container en behoudt referenties naar de oorspronkelijke elementen, inclusief eventuele wijzigbare binnenlijsten.
Na b = a.copy() wijzigt toevoegen aan b de buitenste lijst van b, maar een gedeelde rij wijzigen kan ook a beïnvloeden.
onwijzigbaarheid
Onwijzigbaarheid betekent dat de eigen toestand van een object niet ter plaatse kan veranderen; een tuple legt zijn elementreferenties vast, niet de wijzigbare objecten erin.
Bij een tuple met een lijst kun je de positie van die lijst niet vervangen, maar je kunt nog wel iets aan de opgeslagen lijst toevoegen.

P

pop()
De lijstmethode pop() verwijdert een element op basis van een index en geeft het terug; zonder opgegeven index gebruikt ze de laatste positie.
current = queue.pop(0) bewaart het eerste element uit de wachtrij en verwijdert die positie uit de bestaande lijst.

R

record
Een record is een groep samenhangende velden die één entiteit beschrijft, vaak opgeslagen als een tuple waarvan de posities verschillende betekenissen hebben.
("Kai", 86) kan een naam en score voorstellen; een lijst met zulke records kan groeien naarmate resultaten binnenkomen.
referentie
Een referentie verbindt een naam of containerpositie met een object; het kopiëren van die referentie kopieert het object zelf niet.
b = a geeft beide variabelenamen een pad naar dezelfde lijst, zodat wijzigingen kunnen worden gedeeld.
rekenkundig gemiddelde
Het rekenkundig gemiddelde van een niet-lege collectie getallen is het totaal gedeeld door het aantal elementen; een lege collectie heeft hier geen gemiddelde.
Voor metingen [6, 10, 14] berekent sum(readings) / len(readings) het gemiddelde als 10.0.
remove()
De lijstmethode remove() verwijdert het eerste element dat gelijk is aan haar argument en veroorzaakt ValueError als er geen overeenkomst bestaat.
labels.remove("old") verwijdert één overeenkomende waarde; de methode interpreteert "old" niet als positie.
retourwaarde
Een retourwaarde is het object dat een functieaanroep oplevert voor de aanroepende code, los van eventuele wijzigingen aan argumenten tijdens de aanroep.
Een functie kan iets aan een lijst toevoegen en toch None teruggeven als haar inhoud geen expliciete return-instructie heeft.
reversed()
De ingebouwde functie reversed() levert elementen van een sequentie van het laatste naar het eerste zonder de opgeslagen posities opnieuw te ordenen.
for task in reversed(tasks): verwerkt de laatste taak eerst en behoudt de oorspronkelijke lijstvolgorde.
rij
Een rij in een tabel op basis van lijsten is één binnenlijst, die met de eerste index wordt geselecteerd voordat een tweede index een cel daarin selecteert.
grid[1] haalt de hele tweede rij op, dus telt len(grid[1]) de cellen van die rij.

S

sleutelfunctie
Een sleutelfunctie berekent één vergelijkingswaarde uit elk invoerelement en laat de oorspronkelijke elementen intact in de gesorteerde uitvoer.
Met key=len orden je woorden op lengte zonder die woorden door hun lengtegetallen te vervangen.
sort()
De lijstmethode sort() ordent de bestaande lijst opnieuw volgens de vergelijkingsvolgorde en geeft None terug, met optionele argumenten key en reverse.
scores.sort() verandert de vastgelegde volgorde direct en aliassen van scores zien de gesorteerde posities.
sorted()
De ingebouwde functie sorted() accepteert een itereerbaar object en geeft een nieuwe lijst met de elementen in vergelijkingsvolgorde terug, zonder de invoervolgorde te wijzigen.
ordered = sorted(scores) houdt de oorspronkelijke volgorde van binnenkomst beschikbaar via de variabele scores.
split()
De stringmethode split() verdeelt tekst in een lijst met stringdelen met behulp van opgegeven scheidingstekst of regels voor witruimte.
"yes|no|maybe".split("|") maakt drie afzonderlijke tekstelementen uit de invoer die met scheidingstekens is verdeeld.
stabiel sorteren
Stabiel sorteren behoudt de onderlinge invoervolgorde van elementen met gelijke vergelijkingssleutels, ook bij aflopend sorteren.
Woorden met gelijke lengtes behouden hun oorspronkelijke onderlinge volgorde wanneer len de enige sleutelfunctie is.
stapgrootte van een uitsnede
De stapgrootte van een uitsnede is een geheel getal anders dan nul dat de afstand en richting tussen geselecteerde posities in een sequentie bepaalt.
values[1::2] selecteert elk tweede element vanaf positie 1; een negatieve stapgrootte gaat achteruit.

T

teller
Een teller is een variabele die bijhoudt hoe vaak aan een voorwaarde is voldaan, meestal beginnend bij 0 en met een verhoging van 1 per overeenkomst.
Een scoreteller telt 1 op voor elke voldoende score, ongeacht of die score 60 of 100 is.
toekenning aan een uitsnede
Toekenning aan een uitsnede vervangt een geselecteerd bereik in een wijzigbare sequentie; een aaneengesloten bereik kan een ander aantal elementen ontvangen.
values[1:2] = [8, 9] vervangt één positie door twee waarden en vergroot de lengte van de lijst met één.
transformatie
Een transformatie berekent een uitvoerwaarde uit een invoerelement en bouwt vaak een nieuwe lijst met één resultaat per oorspronkelijk element.
Door voor elke string met een getal int(text) toe te voegen, maak je een lijst die je met sum() kunt optellen.
tuple
Een tuple is een geordende sequentie waarvan de elementen na het maken niet kunnen worden vervangen, toegevoegd of verwijderd.
location = (5, 9) slaat een vast coördinatenpaar op dat je nog steeds kunt indexeren en waarvan je uitsneden kunt maken.
tuple met één element
Een tuple met één element is een tuple met één positie, geschreven met een afsluitende komma om hem te onderscheiden van een gegroepeerde expressie.
(11,) is een tuple, terwijl (11) het gehele getal 11 oplevert zonder een collectie te maken.
tuplesleutel
Een tuplesleutel combineert vergelijkingsvelden in volgorde van prioriteit, waarbij latere velden alleen beslissen als alle eerdere velden gelijk zijn.
(-score, name) teruggeven rangschikt scores van hoog naar laag en gebruikt namen van A tot Z om de volgorde bij gelijke scores te bepalen.

U

uitpakken
Uitpakken kent elementen van een itereerbaar object op volgorde toe aan meerdere doelen, waarbij de aantallen moeten overeenkomen tenzij een sterretje de rest verzamelt.
name, score = ("Kai", 86) geeft elk recordveld een afzonderlijke, betekenisvolle variabelenaam.
uitsnede
Een uitsnede selecteert een reeks elementen met grenzen en een optionele stapgrootte en geeft een nieuwe sequentie van het oorspronkelijke type terug.
tasks[1:4] maakt een lijst van de posities 1, 2 en 3 zonder het element op positie 4 mee te nemen.

W

weggelaten grens
Een weggelaten grens laat een uitsnede het bijbehorende uiteinde van een sequentie gebruiken, afhankelijk van de voorwaartse of achterwaartse stapgrootte.
In values[::-1] laten weggelaten grenzen de achterwaartse uitsnede de hele lijst in omgekeerde volgorde opnemen.
wijzigbaar standaardargument
Een wijzigbaar standaardargument is een wijzigbaar object dat wordt gemaakt wanneer een functie wordt gedefinieerd en opnieuw wordt gebruikt door aanroepen die dat argument weglaten.
Een standaardwaarde basket=[] bewaart toegevoegde elementen tussen aanroepen met de standaardwaarde, omdat elke aanroep dezelfde lijst bereikt.

Z

zip()
De ingebouwde functie zip() koppelt overeenkomstige elementen uit itereerbare invoerobjecten en stopt standaard wanneer de kortste invoer eindigt.
Drie namen koppelen aan twee scores maakt twee paren; voor de naam zonder score is een aparte beslissing nodig.
zoeken naar de eerste overeenkomst
Zoeken naar de eerste overeenkomst doorloopt elementen totdat er één aan een toets voldoet, slaat het resultaat op en stopt voordat latere overeenkomsten het kunnen vervangen.
Een lus kan de index van de eerste negatieve meting opslaan en break gebruiken om de zoekactie direct te beëindigen.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag