- Leren
- Informatica & ICT
- Programmeren
- Inleiding tot programmeren met Python
- Lijsten en tuples in Python
Lijsten en tuples in Python
sort(), sorted() en sleutelfuncties.BeginnerLes 6 van 10 in Cursus Inleiding tot programmeren met Python
Wat je leert
- 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 indexSchrijf 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 lijstSelecteer 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 functiesVoeg 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.
- Maak een lijst en lees de elementen via hun index
- 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 zeMaak 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 elementenZoek waarden met index(), count() en in, en vervang afzonderlijke elementen of hele bereiken door aan een index of uitsnede toe te kennen.
- Voeg elementen toe en verwijder ze
- 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 lusKies 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 toeTel 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 lijstenSla een tabel op als een lijst met rijen, lees en wijzig cellen met twee indices en doorloop elke cel met geneste lussen.
- Doorloop elementen en posities met een lus
- 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 lijstenSchrijf 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 uitKen 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.
- Maak tuples en kies tussen tuples en lijsten
- 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 aliassenLeg 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 binnenlijstenMaak 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 terugVoorspel 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.
- Maak onderscheid tussen namen, objecten en aliassen
- 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 recordsSorteer 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.
- Sorteer met sort() en sorted()
Lijsten en tuples in Python: uitleg
1Maak 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.
| Expressie | Resultaat | Positie |
|---|---|---|
scores[0] | 88 | Eerste |
scores[1] | 92 | Tweede |
scores[2] | 75 | Derde |
scores[-1] | 75 | Laatste |
scores[-2] | 92 | Voorlaatste |
scores[-3] | 88 | Derde 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 islen(values) - 1.- Negatieve indices tellen vanaf het einde, te beginnen bij
-1. - Een ongeldige elementindex veroorzaakt
IndexError; een zwevendekommagetal als index veroorzaaktTypeError. incontroleert 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
| Uitsnede | Betekenis | Resultaat |
|---|---|---|
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
| Expressie | Resultaat |
|---|---|
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,minenmaxleveren 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.
splitmaakt tekstdelen;joinop een scheidingstekst voegt strings samen.
2Wijzig 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
| Bewerking | Gebruikt | Geeft terug |
|---|---|---|
items.pop() | Laatste positie | Verwijderd element |
items.pop(i) | Positie i | Verwijderd element |
items.remove(x) | Eerste waarde gelijk aan x | None |
del items[i] | Positie i | Geen retourwaarde |
del items[start:stop] | Uitsnede van posities | Geen retourwaarde |
items.clear() | Hele lijst | None |
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
appendvoegt één element toe;extendvoegt elk opgegeven element toe.insertvoegt vóór een positie toe en schuift latere elementen op.popverwijdert op positie en geeft het element terug.removeverwijdert de eerste gelijke waarde en gaat mis als die ontbreekt.delverwijdert posities of uitsneden;clearmaakt dezelfde lijst leeg.- Methoden zoals
appendgevenNoneterug, 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.
| Instructie | Effect 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
indexgeeft de eerste overeenkomende positie terug en veroorzaaktValueErrorbij een ontbrekende waarde.countgeeft 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.
3Verwerk 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 enenumeratevoor beide. - De lusvariabele herbinden vervangt geen element van de lijst.
zipstopt bij de kortste invoer.reverseddoorloopt achteruit zonder de lijst te wijzigen.- Een
while-lus moet haar index verhogen en vóórlen(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
breakom 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.
4Gebruik 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:
| Expressie | Waarde 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, aom beide oude waarden te behouden. - Meerdere retourwaarden worden gewoonlijk in één tuple ingepakt.
5Volg 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
| Instructie | Wat verandert? | Wat ziet een alias? |
|---|---|---|
b.append(4) | Bestaande lijst | Toegevoegd element |
b[0] = 9 | Bestaande lijst | Vervangen element |
b = [7, 8] | De naam b | Oorspronkelijke 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, terwijlisobjectidentiteit 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()encopy()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.deepcopykopieert 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
Noneen maak binnen de functie een lijst voor een nieuwe standaardwaarde.
6Zet 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] | Resultaat | Wijzigt 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
sortwijzigt een lijst en geeftNoneterug;sortedgeeft een nieuwe lijst terug.sortedaccepteert itereerbare objecten zoals tuples en strings.reverse=Truesorteert 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=lenofkey=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.
minenmaxgeven oorspronkelijke elementen terug en kiezen bij gelijke sleutels het eerste.
Lijsten en tuples in Python: voorbeelden
1Lees de aantallen leveringen van een week
13 stappen
- 1IntroductieHoud 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. - 2VoorbeeldKoppel 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 alsdeliveries[-1], met een negatieve index vanaf het einde. - 3TipControleer 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
Trueen daarnaFalse. De waarde 9 komt voor, maar 4 niet, ook al is 4 een geldige index.incontroleert de opgeslagen waarden. Als je het aantal op positie 4 wilt, gebruik jedeliveries[4], dat17teruggeeft. - 4UitdagingZoek het voorlaatste aantal
Wat geeft
deliveries[-2]terug en zoudeliveries[len(deliveries)]werken?---reveal---
De negatieve index
-2selecteert9, één plaats vóór het laatste element17. De tweede expressie probeert index 5 en veroorzaakt IndexError. Gebruiklen(deliveries) - 1of-1om het laatste element te selecteren; het aantal elementen ligt één voorbij de laatste niet-negatieve index. - 5VoorbeeldSelecteer 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.middleis een nieuwe lijst, dus als je posities in de buitenste lijst wijzigt, vervang je geen positie indeliveries. - 6UitlegLaat 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. - 7VoorbeeldDoorloop 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. - 8UitdagingMaak onderscheid tussen een aantal en een lijst
Wat zijn de waarden en typen van
deliveries[2]endeliveries[2:3]?---reveal---
deliveries[2]is het gehele getal15.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. - 9VoorbeeldBereken 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
31en daarna10.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. - 10KernpuntVerwerk 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. Hoewelsum([])gelijk is aan 0, zou je door nul delen als je dat totaal doorlen([])deelt. Ookminenmaxgaan mis bij deze lege invoer. - 11VerbandMaak 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.joinwordt 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.splitwerkt de andere kant op en verdeelt tekst in delen die strings zijn. - 12UitdagingSelecteer, 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 opdeliveries[2]gelijk aan 15. - 13SamenvattingKies 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.
2Bewerk een aanvraag voor benodigdheden
10 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieVolg de lijst en de teruggegeven waarde
- 2VoorbeeldVoeg een groep artikelen toe
- 3VoorbeeldPlaats één artikel vooraan
- 4VoorbeeldVerwijder en bewaar een opgehaald artikel
- 5UitdagingKies voor verwijderen op waarde
- 6VoorbeeldZoek de positie voor een correctie
- 7VoorbeeldVervang één artikel door een groep
- 8UitdagingVerwijder een bereik en zoek een waarde
- 9UitdagingRond de aanvraag af zonder die te verliezen
- 10SamenvattingKies de bewerking die bij de wijziging past
3Schoon metingen op en tel een tabel op
13 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieBepaal wat elke lus bijhoudt
- 2UitlegLees een waarde zonder de positie te wijzigen
- 3VoorbeeldVervang ongeldige metingen via hun index
- 4VerbandKoppel labels aan metingen
- 5UitdagingVerklaar een overgeslagen element
- 6VoorbeeldTel de positieve metingen
- 7VoorbeeldMaak een gefilterd en getransformeerd resultaat
- 8TipZoek tot de eerste overeenkomst
- 9UitdagingKies een geldig maximum
- 10VoorbeeldSelecteer een rij en een cel
- 11VoorbeeldTel alle rijen op
- 12UitdagingFilter over de hele tabel
- 13SamenvattingHoud voorbereiding gescheiden van herhaald werk
4Gebruik een vast record en pak de velden uit
10 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieHoud een record bij elkaar
- 2VoorbeeldMaak het stationrecord
- 3KernpuntToets de grens van onwijzigbaarheid
- 4UitdagingMaak een tuple met één element
- 5VoorbeeldGeef elk veld een naam
- 6VoorbeeldBewaar de eerste meting en de rest
- 7UitdagingVerwissel coördinaatwaarden
- 8VoorbeeldGeef een paar uitersten terug
- 9UitdagingLees één geselecteerd veld en pak het uit
- 10SamenvattingLees de structuur voordat je uitpakt
5Volg een gekopieerde tabel door een functie
14 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieTeken paden naar objecten
- 2VoorbeeldMaak een alias
- 3VoorbeeldLaat één naam ergens anders naar verwijzen
- 4UitdagingVoorspel twee soorten optelling
- 5VoorbeeldKopieer de buitenste tabel
- 6VoorbeeldWijzig een gedeelde rij
- 7KernpuntVervang een gekopieerde rij
- 8UitdagingKies een diepere kopie
- 9VoorbeeldWijzig via een parameter
- 10VerbandGeef een afzonderlijke lijst terug
- 11UitlegVoorkom een blijvende standaardwinkelmand
- 12UitdagingMaak onderscheid tussen lokaal herbinden en leegmaken
- 13UitdagingVolg een ondiepe kopie die aan een functie wordt doorgegeven
- 14SamenvattingVolg het niveau dat wordt gewijzigd
6Rangschik records zonder hun volgorde van binnenkomst te verliezen
13 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieMaak onderscheid tussen opgeslagen gegevens en vergelijkingssleutels
- 2VoorbeeldBehoud de volgorde van binnenkomst
- 3VoorbeeldVergelijk omkeren met aflopend sorteren
- 4TipControleer het invoertype
- 5UitdagingVolg een sorteerresultaat
- 6VoorbeeldKies een scoresleutel
- 7KernpuntBehoud bij gelijke scores de volgorde van binnenkomst
- 8UitdagingGeef een aanroepbaar object door
- 9VoorbeeldVoeg een alfabetisch aanvullend sorteercriterium toe
- 10TipKeer alleen de numerieke richting om
- 11VerbandKies een element op basis van een uiterste sleutel
- 12UitdagingBehoud de oorspronkelijke vorm van records en namen
- 13SamenvattingKies het effect en de regel
Lijsten en tuples in Python: oefenvragen
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)
Toon antwoordVerberg antwoord
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
Toon antwoordVerberg antwoord
(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
amount na label, amount = ("rice", 4)?Toon antwoordVerberg antwoord
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
middle na first, *middle, last = (2, 5, 8, 11, 14)?Toon antwoordVerberg antwoord
[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)
Toon antwoordVerberg antwoord
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)
Toon antwoordVerberg antwoord
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)
Toon antwoordVerberg antwoord
+= 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)
Toon antwoordVerberg antwoord
(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)
Toon antwoordVerberg antwoord
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)
Toon antwoordVerberg antwoord
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
codes = [2, 5, 8, 11, 14, 17] de waarde van codes[1:5:2]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
levels = [14, 29, 37, 52] de waarde van levels[-2]?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"])
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])
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]
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
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)
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])
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
items = [9, 16, 25] wanneer Python items[len(items)] evalueert?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
[4, 99] < [5, 1]?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)
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)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
table = [[6, 8, 10], [11, 13, 15]] de expressie table[1][0] + table[0][2] op?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
list(zip(["Lee", "Mo", "Nia"], [41, 56]))?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])
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
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)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
[-14, -6, -19]. Waarmee moet het lopende maximum worden geïnitialiseerd?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)
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
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
tags.count("done") terug bij tags = ["new", "old", "new"]?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)
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])
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)
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)
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)
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]
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
codes = ["q", "r", "q", "s", "q"] de waarde van codes.index("q", 1)?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)
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)
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)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
result na nums = [8, 2, 5] en result = nums.sort()?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
sorted(["20", "3", "11"]) terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
sorted(["pear", "a", "plum", "to"], key=len) terug?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
values = [6, 1, 4] achtereenvolgens values[::-1] en sorted(values, reverse=True)?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
(name, score). Welke inhoud van een sleutelfunctie plaatst hogere scores eerst en namen van A tot Z bij gelijke scores?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))
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))
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))
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
(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?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
values = [12, 24] de waarde van values[5:20]?Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
None?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)
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)
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])
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)
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)
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)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
[31, 12, 27, 18, 24, 15, 21]. Wat is de middelste waarde na het sorteren van een kopie?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)
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Kom je niet uit je eigen opgave? Huiswerkhulp
Kernbegrippen
A
aanvullend sorteercriterium
accumulator
total = 0 in en gebruik daarna total += reading om eerdere optellingen te behouden.aflopende volgorde
reverse=True.[5, 1, 8] geeft [8, 5, 1]; alleen de posities omkeren geeft [8, 1, 5].alias
current = queue, verandert een toevoeging via current ook de lijst die via queue wordt bereikt.append()
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
values.clear() maakt de bestaande lijst leeg, zodat elke alias ziet dat die lijst leeg wordt.buitenste lijst
b[0] = [9] vervangt een rijreferentie, terwijl b[0].append(9) het bestaande rijobject wijzigt.C
cel
grid[0][2] = 9 vervangt de derde cel van de eerste rij, mits die positie al bestaat.concatenatie
+ maakt uit twee lijsten een nieuwe buitenste lijst.morning + afternoon kan twee lijsten met metingen combineren en beide oorspronkelijke lijsten intact laten.count()
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
copy.deepcopy(rows) kan oorspronkelijke tabelcellen behouden terwijl een afzonderlijke geneste structuur wordt gewijzigd.E
element
["desk", ["pen", "pad"]] heeft de buitenste lijst twee elementen, ook al bevat de binnenlijst twee strings.elementtoekenning
prices[1] = 6.5 corrigeert één vastgelegde prijs; de toekenning kan geen element maken op index len(prices).enumerate()
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
values[2:5] geeft index 5 aan waar de selectie stopt en levert die geen element.extend()
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
G
gedeelde rij
table = [row, row] slaat één rij twee keer op, hoewel het afdrukken van de tabel twee rijposities toont.gelijktijdige verwisseling
left, right = right, left behoudt beide waarden zonder een afzonderlijk benoemde tijdelijke waarde.geneste lijst
[[2, 5], [7]] bevat de buitenste lijst twee rijen met lengtes twee en één.geneste lus
H
hashbare waarde
(5, 9) kan een coördinatensleutel zijn, maar ([5], 9) niet omdat de binnenlijst niet hashbaar is.herbinden
b = a geeft de toekenning b = [] aan b een nieuwe lijst, terwijl a naar het origineel blijft verwijzen.herhaling
* 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
key=str.lower worden "Oak" en "oak" als gelijk vergeleken zonder hun hoofdletters te veranderen.I
identiteit
is; gelijke inhoud kan bij verschillende lijstobjecten horen.[1, 3] zijn bij vergelijking gelijk, maar een identiteitscontrole tussen die lijsten is onwaar.index
colors = ["blue", "gold"] selecteert index 1 de waarde 'gold', die ook op index -1 staat.index()
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
result = lowest, highest slaat beide waarden op in een tuple die vanuit een functie kan worden teruggegeven.insert()
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
for-lus die een lijst van het eerste tot het laatste element doorloopt.names kent elke huidige naam toe aan de lusvariabele voordat de lusinhoud wordt uitgevoerd.itereerbaar object
list().list(range(3)) die in de nieuwe lijst [0, 1, 2].J
join()
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
[3, 20] < [4, 1] is waar omdat de eerste elementen de volgorde bepalen voordat de tweede worden vergeleken.lidmaatschapscontrole
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
scores = [73, 91, 73] en samen verwerken.lijstparameter
values.clear() aanroept, maakt de lijst van de aanroepende code leeg; de toekenning values = [] doet dat niet.lopend maximum
lusvariabele
for value in values: value = 0 verandert de lusnaam, maar de opgeslagen lijstposities veranderen niet.M
mediaan
len(ordered) // 2.[5, 12, 2] geeft [2, 5, 12], waardoor de mediaan 5 op de middelste index 1 staat.methode
queue.append("next") roept de methode van de lijst aan en geeft het toe te voegen element als argument mee.mutatie
items[0] = 7 wijzigt de lijst; elke alias van die lijst ziet dat de eerste positie 7 wordt.N
naam met een sterretje
first, *rest = (4, 8, 12) is rest gelijk aan [8, 12], ook al is de invoer een tuple.None als standaardwaarde
None kan een weggelaten lijstargument aanduiden, zodat een functie voor elke aanroep met de standaardwaarde binnen haar inhoud een nieuwe lijst maakt.values=None voorkomt de tak if values is None: values = [] een onbedoeld gedeelde standaardlijst.O
omkering
values.reverse() wijzigt een lijst, terwijl values[::-1] een omgekeerde ondiepe kopie maakt.ondiepe kopie
b = a.copy() wijzigt toevoegen aan b de buitenste lijst van b, maar een gedeelde rij wijzigen kan ook a beïnvloeden.onwijzigbaarheid
P
pop()
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
("Kai", 86) kan een naam en score voorstellen; een lijst met zulke records kan groeien naarmate resultaten binnenkomen.referentie
b = a geeft beide variabelenamen een pad naar dezelfde lijst, zodat wijzigingen kunnen worden gedeeld.rekenkundig gemiddelde
[6, 10, 14] berekent sum(readings) / len(readings) het gemiddelde als 10.0.remove()
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
None teruggeven als haar inhoud geen expliciete return-instructie heeft.reversed()
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
grid[1] haalt de hele tweede rij op, dus telt len(grid[1]) de cellen van die rij.S
sleutelfunctie
key=len orden je woorden op lengte zonder die woorden door hun lengtegetallen te vervangen.sort()
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()
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()
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
len de enige sleutelfunctie is.stapgrootte van een uitsnede
values[1::2] selecteert elk tweede element vanaf positie 1; een negatieve stapgrootte gaat achteruit.T
teller
toekenning aan een uitsnede
values[1:2] = [8, 9] vervangt één positie door twee waarden en vergroot de lengte van de lijst met één.transformatie
int(text) toe te voegen, maak je een lijst die je met sum() kunt optellen.tuple
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
(11,) is een tuple, terwijl (11) het gehele getal 11 oplevert zonder een collectie te maken.tuplesleutel
(-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
name, score = ("Kai", 86) geeft elk recordveld een afzonderlijke, betekenisvolle variabelenaam.uitsnede
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
values[::-1] laten weggelaten grenzen de achterwaartse uitsnede de hele lijst in omgekeerde volgorde opnemen.wijzigbaar standaardargument
basket=[] bewaart toegevoegde elementen tussen aanroepen met de standaardwaarde, omdat elke aanroep dezelfde lijst bereikt.Z
zip()
zip() koppelt overeenkomstige elementen uit itereerbare invoerobjecten en stopt standaard wanneer de kortste invoer eindigt.zoeken naar de eerste overeenkomst
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.