Lijsten en statistiek
Een lijst houdt meerdere waarden onder één naam bijeen, zoals een week aan stappentellingen, examencijfers of maandelijkse bonnen. Daarna kun je ze optellen, middelen, spreiding meten en relevante waarden selecteren.
Deze pagina behandelt lijsten invoeren en indexeren, beschrijvende statistiek, bovenliggende regels optellen, regels met tags labelen voor totalen ongeacht hun positie, sorteren en delen selecteren, bewerken met map en filter, en rekenen met hele lijsten. Gebruik dit om een kolom cijfers samen te vatten. Lijsten van rijen kunnen ook matrices vormen; die hebben een eigen pagina.
Een lijst schrijven
Zet de waarden tussen vierkante haken, gescheiden door komma’s:
scores = [72, 85, 91, 64, 88] geeft [72, 85, 91, 64, 88]scores[0] geeft 72scores[4] geeft 88length(scores) geeft 5De positie van een waarde is de index, tussen vierkante haken na de lijst. Indexen beginnen bij nul: scores[0] is het eerste cijfer en scores[4] het vijfde. Het laatste element staat altijd op length(scores) - 1. Een negatieve, gebroken of te grote index geeft een fout; indexen lopen niet vanaf het einde terug.
Elementen mogen berekeningen, hoeveelheden met eenheden of andere lijsten zijn:
[2 * 45, 60 + 15] geeft [90, 75][1.5 kg, 750 g] geeft [1.5 kg, 750 g][[1, 2], [3, 4]][1][0] geeft 3Bij geneste lijsten kiest de eerste index de binnenste lijst en de tweede een waarde daarin: [1] kiest [3, 4], daarna kiest [0] de waarde 3.
Duizendtalscheiding werkt in lijsten, zodat je getallen zoals geschreven kunt plakken. Zet een spatie na elke komma tussen waarden; een komma met direct drie cijfers blijft onderdeel van het getal:
salaries = [£32,000, £41,500, £38,250] geeft [£32,000.00, £41,500.00, £38,250.00]average(salaries) geeft £37,250.00Let op het volgende:
- Zonder spaties scheidt elke komma waarden, dus
[8200,10400]bevat twee waarden.[100,200,300]kan één getal of drie zijn; Varlig geeft dan een fout die beide interpretaties noemt. - Resultaten tonen duizendtalscheiding en een spatie na elke scheidingskomma.
[8,200, 10,400]is dus een lijst van twee waarden. - Een lijst bevat maximaal 1.024 waarden.
Samenvattende statistiek
scores = [72, 85, 91, 64, 88]sum(scores) geeft 400average(scores) geeft 80median(scores) geeft 85min(scores) geeft 64max(scores) geeft 91count(scores) geeft 5mean en avg zijn andere namen voor average, total voor sum, stdev voor stddev en count voor length. Spreadsheetgewoonten blijven dus bruikbaar. product vermenigvuldigt de waarden. Zie hieronder voor de meest voorkomende waarde, percentielen en kwartielen.
Bij een benoemde lijst kun je de statistiek ook in woorden schrijven:
scores = [72, 85, 91, 64, 88]average of scores geeft 80total of scores geeft 400sum of, mean of, median of, min of, max of en count of werken hetzelfde. Schrijf na of een naam of kommagescheiden waarden, met of zonder ronde haakjes. Gebruik voor waarden tussen vierkante haken de functievorm, zoals average([72, 85, 91]).
De meeste statistieken, waaronder sum, product, average, median, min, max, count en stddev, accepteren ook losse waarden in plaats van een lijst:
max(72, 85, 91) geeft 91sum(1, 2, 3, 4) geeft 10average of 70, 85, 91 geeft 82mean of (1,2,3) geeft 2average(1,200, 1,800) geeft 1,500De regels erboven optellen
Een regel met alleen sum, total, subtotal, grand total, average, max of min berekent die statistiek over de resultaten erboven. Ze geldt voor de eigen sectie, vanaf het vorige totaal, een scheidingslijn --- of een kop #. Zo krijgt elk notitiedeel tijdens het typen een eigen cijfer. Dit werkt zoals Subtotal in het contextmenu van een regel:
# Groceriesbread = £1.20milk = £1.45eggs = £2.30total geeft £4.95# Householdbin bags = £3.50washing up liquid = £1.80total geeft £5.30Het woord mag een label, eigen naam, omrekening of opmerking krijgen, zodat de regel bij de rest van de notitie past:
tickets = £64train = £41.20Estimated total: total geeft £105.20est = total bewaart het cijfer onder een naam; total // still to book zet er een opmerking bij. total in kg rekent vóór weergave om, handig bij gram en kilogram door elkaar. Een statistiekwoord naast een operator gebruikt het cijfer dat een eigen regel zou tonen: £5 + subtotal telt vijf pond bij het lopende totaal op.
# Parcels12 kg geeft 12 kg4 kg geeft 4 kg850 g geeft 850 gtotal in kg geeft 16.85 kgmax geeft 12 kgHeb je een waarde sum of total genoemd, dan toont de regel die eigen waarde. Staat er niets bruikbaars boven, dan verschijnt Unsupported: no amounts above to add up in plaats van leegte of nul. Vaak staat er dan een vergeten kop boven.
Elk bedrag telt eenmaal. Als een latere regel in de sectie verder rekent met een benoemd bedrag, telt het totaal die regel in plaats van beide. Zo geeft een boodschappenlijst met eenheidsprijzen en aantallen wat je werkelijk betaalt:
shirt = £18.50shorts = £99 * shirt geeft £166.5010 * shorts geeft £90.00fee = £40vat = fee * 20% geeft £8.00total geeft £304.50shirt en shorts tellen via de twee regels die ze gebruiken. fee blijft in het totaal omdat vat er alleen een aandeel van neemt.
Dit volgt een keten van namen tot het einde. Splitst een notitie een bedrag in aandelen en telt die daarna weer op, dan telt de optellende regel mee én het oorspronkelijke bedrag:
pot = £9001st = 50% of pot geeft £450.002nd = 30% of pot geeft £270.003rd = 20% of pot geeft £180.001st + 2nd + 3rd geeft £900.00total geeft £900.00Alleen gelijksoortige bedragen worden opgeteld. Percentages, tarieven en gewone aantallen blijven buiten beschouwing als erboven geld of een hoeveelheid staat, net als foutregels. Losse getallen in een kolom tellen mee als ze tot op de cent zijn geschreven zoals bedragen. Extra decimalen, bijvoorbeeld bij een wisselkoers of factor, worden overgeslagen. De toelichting benoemt alles wat buiten het totaal blijft, zoals regel 3 met people = 2 of regel 2 met een fout. Zo zie je direct wat is meegeteld.
Een reeks van twee of meer onbenoemde bedragen direct boven het totaal, maar onder een uit namen berekende regel, wordt apart opgeteld. Zo telt een budgetberekening bovenaan niet opnieuw mee in de lijst eronder:
budget = £18,000remaining = budget - £6,388.25 geeft £11,611.75- skip hire £250 geeft £250.00- deep clean £120 geeft £120.00subtotal geeft £370.00Label niet-aangrenzende regels met een tag om ze samen op te tellen.
Meest voorkomende waarden
mode geeft de waarde die vaker dan alle andere voorkomt. modes geeft als lijst alle waarden die de hoogste frequentie delen:
marks = [3, 4, 4, 5, 5, 5, 6]mode(marks) geeft 5modes([1, 1, 2, 2, 3]) geeft [1, 2]mode geeft alleen een resultaat als één waarde strikt het vaakst voorkomt. Zonder herhaling of bij een gedeelde eerste plaats meldt het dat, in plaats van een waarde te kiezen:
mode([1, 2, 3]) geeft Unsupported: No value repeats, so this list has no mode; use median or average insteadPercentielen en kwartielen
percentile(list, rank) accepteert een rang van 0 tot 100 en geeft de waarde op dat punt, met interpolatie tussen de twee dichtstbijzijnde waarnemingen. quartile(list, k) doet hetzelfde per kwart, met k van 0 tot 4: quartile(list, 1) is percentile(list, 25):
scores = [72, 85, 91, 64, 88]percentile(scores, 50) geeft 85percentile(scores, 25) geeft 72quartile(scores, 3) geeft 88quartile(scores, 4) geeft 91percentile([1, 2, 3, 4], 25) geeft 1.75quartile([1, 2, 3, 4], 3) geeft 3.25Het 50e percentiel is de mediaan. Het 0e en 100e — quartile(list, 0) en quartile(list, 4) — zijn minimum en maximum, gelijk aan min en max. Een rang buiten het bereik geeft een fout, niet de dichtstbijzijnde geldige waarde:
percentile([1, 2, 3, 4], 101) geeft Unsupported: A percentile is between 0 and 100quartile([1, 2, 3, 4], 5) geeft Unsupported: A quartile is 0, 1, 2, 3 or 4Spreiding: variantie en standaardafwijking
scores = [72, 85, 91, 64, 88]variance(scores) geeft 132.5stddev(scores) to 1 dp geeft 11.5Beide zijn steekproefstatistieken: ze delen door het aantal waarden min één (n - 1), gebruikelijk als je cijfers een steekproef uit een groter geheel zijn. Ze vereisen minstens twee waarden. Voeg to 1 dp toe om een statistiek af te ronden.
Is je lijst de volledige populatie in plaats van een steekproef, gebruik dan de populatievormen. Die delen door n en hebben aan één waarde genoeg:
# Train delays in minutesdelays = [2, 4, 4, 4, 5, 5, 7, 9]sample_variance(delays) geeft 4.5714285714population_variance(delays) geeft 4sample_stddev(delays) geeft 2.1380899353population_stddev(delays) geeft 2| Aanroep | Deelt de gekwadrateerde afwijkingen door | Vereist |
|---|---|---|
variance, sample_variance |
n - 1 |
Twee waarden |
population_variance |
n |
Eén waarde |
stddev, stdev, sample_stddev |
n - 1 |
Twee waarden |
population_stddev |
n |
Eén waarde |
sample_variance en sample_stddev zijn langere namen voor variance en stddev, waarmee je de bedoelde variant expliciet maakt. De korte namen waren en blijven de steekproefvormen.
Lijsten met eenheden
sum, average, median, mode, modes, percentile, quartile, min, max, stddev en population_stddev behouden eenheden en rekenen compatibele eenheden om. Waarden worden in de eenheid van het eerste element gelezen; ook het resultaat gebruikt die eenheid:
commutes = [24 min, 31 min, 27 min, 22 min]sum(commutes) geeft 1 hour 44 minaverage(commutes) geeft 26 minmedian(commutes) geeft 25.5 minpercentile(commutes, 25) geeft 23.5 minpopulation_stddev(commutes) geeft 3.3911649916 minsum([1 kg, 500 g]) geeft 1.5 kgmodes([1 kg, 500 g, 1 kg, 500 g]) geeft [0.5 kg, 1 kg]Varianties zijn de uitzondering: ze kwadrateren waarnemingen en behouden daarbij geen eenheid. Daarom accepteren ze alleen gewone getallen.
sample_variance([1 kg, 2 kg]) geeft Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unitOok sort werkt alleen met gewone getallen. Een statistiek met onverenigbare eenheden, zoals sum([1 kg, 3 m]), geeft een fout in plaats van waarden stilzwijgend over te slaan.
De exactheidsregels staan bij Wat de rekenengine garandeert.
Lege lijsten
| Aanroep op een lege lijst | Resultaat |
|---|---|
sum([]) |
0 |
product([]) |
1 |
count([]), length([]) |
0 |
average([]), median([]), min([]), max([]) |
Fout |
variance([]), stddev([]) |
Fout |
Een lege lijst ontstaat vaak door een filter zonder overeenkomsten. Daardoor kan average op een gefilterde lijst mislukken, ook als de oorspronkelijke lijst waarden bevat.
Tags
Een tag is een # direct gevolgd door een woord, zoals #food. Zet hem ergens op een regel om die te labelen. De tag doet niet mee aan de berekening: de regel toont haar eigen resultaat en wordt gegroepeerd met alle regels met dezelfde tag. total of #food telt ze op:
£12.50 lunch #food geeft £12.50£8 coffee #food geeft £8.00flights = £420 #trip geeft £420.00total of #food geeft £20.50Dat kan een tag wat een subtotaal niet kan: de regels hoeven niet naast elkaar te staan. Een week uitgaven, een reis en een boodschappenlijst kunnen één blok delen met elk een eigen totaal onderaan. Houd de aanwijzer boven een tag voor het huidige totaal.
Elke statistiek werkt op een tag. of is optioneel, de tag mag vóór of na het woord staan en het resultaat kan zoals elke regel een label of eigen naam krijgen:
#food £12.50#food £8£420 #triptotal of #food geeft £20.50average of #food geeft £10.25count of #food geeft 2min of #food geeft £8.00max of #food geeft £12.50#food total geeft £20.50Food this week: sum of #food geeft £20.50eaten = avg #food geeft £10.25sum, total, average, avg, mean, count, min en max worden allemaal zo gelezen.
Een tagstatistiek kan overal staan waar een bedrag past; je kunt er dus mee doorrekenen. Zo trek je een aanbetaling van een lopend totaal af, schaal je het op of vergelijk je twee tags:
£20 shop #food geeft £20.00£30 meal out #food geeft £30.00total of #food - £10 geeft £40.002 * total of #food geeft £100.00Cooking kit: total of #food geeft £50.00Een regel mag zoveel tags hebben als je wilt; elke tag telt de regel mee. Noem twee tags in één formulering en je krijgt de regels die beide dragen:
£50 dinner #trip #food geeft £50.00£30 taxi #trip geeft £30.00£9 sandwich #food geeft £9.00total of #trip geeft £80.00total of #food geeft £59.00total of #trip #food geeft £50.00Wat een tagtotaal omvat
Een tagformulering bekijkt precies dezelfde regels als een gewone total en volgt dezelfde regels:
- Ze geldt voor de eigen sectie, terug tot het vorige totaal, een scheidingslijn
---of een kop#. - Ze telt alleen gelijksoortige bedragen op. Percentages, tarieven, gewone aantallen en foutregels blijven erbuiten; de toelichting noemt ze, bijvoorbeeld regel 2 met people = 2.
- Elk bedrag telt eenmaal. Een prijs met tag die een latere regel met dezelfde tag vermenigvuldigt, telt via die latere regel mee, niet via beide.
Eén kop is dus genoeg om #food van de ene week van de volgende te scheiden:
# Week 1£20 lunch #food geeft £20.00total of #food geeft £20.00# Week 2£30 lunch #food geeft £30.00total of #food geeft £30.00Als er niets op te tellen is, meldt de regel dat in plaats van leegte of nul te tonen. Vaak gaat het om een typefout in de tag of een vergeten kop:
£12.50 lunch #food geeft £12.50total of #drinks geeft Unsupported: no lines tagged #drinks abovering the plumber #jobstotal of #jobs geeft Unsupported: no amounts tagged #jobs aboveTagnamen schrijven
Een tagnaam mag letters, cijfers, _, - en / bevatten. #q1-2026 en #trip/lisbon zijn dus elk één naam. Hoofdletters maken niet uit:
£20 flight #trip/lisbon geeft £20.00£35 hotel #Trip/Lisbon geeft £35.00total of #trip/lisbon geeft £55.00Een # dat niet direct aan een woord vastzit behoudt zijn oude betekenis, zodat bestaande tekst niet verandert:
| Je schrijft | Betekenis |
|---|---|
# Weekly shop |
Een opmerking, door de spatie na het hekje |
5 + 5 # comment |
Hetzelfde: alles na het hekje wordt genegeerd |
C#4 in Hz |
Een muzikaal kruis, omdat het hekje aan de noot vast staat |
#1, Invoice #123 |
Een getal, geen tag: een tagnaam mag niet met een cijfer beginnen |
#ff0000, #fff |
Een kleurcode |
varlig.app/docs#tags |
Een webadres met een fragment |
Een tagnaam moet met een letter beginnen. Drie, vier, zes of acht hexadecimale cijfers na het hekje worden als kleur gelezen: #fee is dus een kleur, #fees een tag.
Tags in een notitie en tags in een blok
Tags die notities in de zijbalk ordenen staan beschreven bij Tags, links en terugverwijzingen. Die gelden niet binnen een rekenblok: #food daar labelt alleen de regel voor totalen en verschijnt nooit in de zijbalk. #food buiten het blok ordent de notitie zonder de berekeningen te beïnvloeden. Schrijf de tag op beide plekken als je beide wilt. Er is één verschil: een notitietag mag spaties bevatten als je hem met een tweede # afsluit; een tag in een rekenblok eindigt altijd bij de eerste spatie.
Lijstfuncties
| Aanroep | Wat deze doet |
|---|---|
range(start,end) |
Gehele getallen van start tot en met end |
range(start,end,step) |
Tellen met step, die negatief of niet-geheel mag zijn, maar niet nul |
length(list), count(list) |
Aantal waarden |
sort(list) |
Van klein naar groot; alleen getallen zonder eenheid |
reverse(list) |
Dezelfde waarden in omgekeerde volgorde; elk waardetype |
unique(list) |
Behoudt de eerste keer dat elke waarde voorkomt |
slice(list,start,end) |
Waarden vanaf index start tot, maar niet inclusief, index end |
map(expression,variable,list) |
Berekent de uitdrukking eenmaal voor elke waarde |
filter(condition,variable,list) |
Behoudt de waarden waarvoor de voorwaarde true is |
range(1, 5) geeft [1, 2, 3, 4, 5]range(0, 100, 25) geeft [0, 25, 50, 75, 100]range(10, 0, -2) geeft [10, 8, 6, 4, 2, 0]scores = [72, 85, 91, 64, 88]sort(scores) geeft [64, 72, 85, 88, 91]reverse(sort(scores)) geeft [91, 88, 85, 72, 64]slice(sort(scores), 0, 3) geeft [64, 72, 85]unique([4, 2, 4, 6, 2]) geeft [4, 2, 6]reverse(sort(…)) zet de grootste waarde eerst; slice(sort(…), 0, 3) selecteert de drie laagste.
De grenzen moeten voldoen aan 0 <= start <= end <= length. Gelijke start en end geven een lege lijst. Er is geen verkorte notatie scores[0:2]; schrijf slice(scores, 0, 2).
unique vergelijkt waarden exact zoals opgeslagen. 1 kg en 1000 g tellen dus als twee verschillende waarden. Ook resultaten die op de tiende decimaal verschillen worden niet samengevoegd.
Map en filter
map berekent een uitdrukking voor elke lijstwaarde. filter behoudt waarden die aan een test voldoen. In beide staat eerst de uitdrukking, dan een naam voor elke waarde, dan de lijst:
scores = [72, 85, 91, 64, 88]map(s + 5, s, scores) geeft [77, 90, 96, 69, 93]filter(s >= 80, s, scores) geeft [85, 91, 88]count(filter(s >= 80, s, scores)) geeft 3average(filter(s >= 80, s, scores)) geeft 88Lees filter(s >= 80, s, scores) als “de waarden s in scores waarvoor s >= 80”. Beide werken met eenheden en geld:
map(p * 1.2, p, [£10, £25, £40]) geeft [£12.00, £30.00, £48.00]spend = [£42.50, £18.20, £65.00, £23.30]filter(x > £30, x, spend) geeft [£42.50, £65.00]sum(filter(x > £30, x, spend)) geeft £107.50De gekozen naam bestaat alleen binnen de aanroep en verandert geen gelijknamige waarde elders in de notitie:
x = 10map(x * 2, x, [1, 2, 3]) geeft [2, 4, 6]x geeft 10De voorwaarde in filter moet een vergelijking of andere waar/onwaar-waarde zijn. Een gewoon getal geldt niet als waar, dus filter(x, x, [0, 1, 2]) is een fout. Een lege lijst mappen of filteren geeft een lege lijst.
Rekenen met lijsten
Je kunt elke waarde met één getal vermenigvuldigen of delen, en twee even lange lijsten per element optellen of aftrekken:
[30, 36, 22] / 40 * 100 geeft [75, 90, 55]2 * [3, 1, 4] geeft [6, 2, 8]-[5, -3] geeft [-5, 3]mocks = [62, 70, 60]finals = [72, 78, 69]finals - mocks geeft [10, 8, 9]average(finals - mocks) geeft 9[1 kg, 2 kg] + [500 g, 500 g] geeft [1.5 kg, 2.5 kg][72, 85] == [72, 85] geeft trueDe eerste regel zet scores op 40 om in percentages. finals - mocks koppelt het oefenexamencijfer van elke student aan diens eindcijfer.
Sommige bewerkingen worden niet ondersteund op lijsten:
- Eén getal bij een lijst optellen, zoals
scores + 5. Gebruikmap(s + 5, s, scores). - Lijsten van verschillende lengtes optellen. Waarden worden nooit herhaald om lengtes passend te maken.
- Twee vlakke lijsten met
*vermenigvuldigen. Gebruikdotvoor de som van paarsgewijze producten:dot([2, 3, 1], [4, 5, 10])is33, bijvoorbeeld twee koffies van 4, drie theeën van 5 en één gebakje van 10. Tussen lijsten van rijen betekent*matrixvermenigvuldiging; zie Vectoren en matrices.
Lijsten van rijen
Een lijst van rijen werkt als kleine tabel. average en sum rekenen per kolom; map kan per rij werken:
# Each row is one student: [mock, final]results = [[62, 72], [70, 78], [60, 69]]average(results) geeft [64, 73]sum(results) geeft [192, 219]map(average(r), r, results) geeft [67, 74, 64.5]median, min, max en stddev accepteren geen lijsten van rijen. Gebruik map over de rijen, zoals in de laatste regel, of haal een kolom als aparte lijst op.
De exacte regels voor al deze bewerkingen staan in de referentie voor geavanceerde wiskunde.
Alles combineren
Hier staat een week aan stappentellingen van een horloge, met een dagelijks doel:
# Steps, Monday to Sundaysteps = [8200, 10400, 6300, 12000, 9100, 7400, 9600]goal = 9000sum(steps) geeft 63,000average(steps) geeft 9,000median(steps) geeft 9,100Days on target: count(filter(s >= goal, s, steps)) geeft 4Spread: max(steps) - min(steps) geeft 5,700# Roughly 0.75 m per stepwalked = sum(steps) * 0.75 mwalked in km geeft 47.25 kmHet gemiddelde ligt precies op het doel, maar slechts vier dagen haalden het. Tussen de beste en slechtste dag zitten 5.700 stappen. Verander goal of plak de volgende week in en elke regel wordt bijgewerkt.