Listen und Statistik
Eine Liste hält mehrere Werte unter einem Namen zusammen, etwa die Schrittzahlen einer Woche, eine Reihe von Klausurpunkten oder die Kassenbons eines Monats. Stehen die Werte erst in einer Liste, kannst du sie summieren, ihren Durchschnitt bilden, messen, wie stark sie streuen, und die wichtigen herausgreifen.
Auf dieser Seite geht es darum, Listen zu schreiben und zu indizieren, um Kennzahlen, um das Addieren der Zeilen darüber, um das Beschriften von Zeilen mit Tags, damit du sie aufsummieren kannst, wo immer sie stehen, um Sortieren und Ausschneiden, um das Umformen einer Liste mit map und filter und um Rechnen mit ganzen Listen. Sie hilft dir immer dann, wenn du eine Spalte voller Zahlen zusammenfassen willst. Listen aus Zeilen können auch als Matrizen dienen, die eine eigene Seite haben.
Eine Liste schreiben
Schreib die Werte in eckige Klammern, getrennt durch Kommas:
Punkte = [72, 85, 91, 64, 88] ergibt [72, 85, 91, 64, 88]Punkte[0] ergibt 72Punkte[4] ergibt 88length(Punkte) ergibt 5Die Position eines Werts in der Liste ist sein Index, den du in eckigen Klammern hinter die Liste schreibst. Indizes beginnen bei null, Punkte[0] ist also das erste Ergebnis und Punkte[4] das fünfte. Das letzte Element steht immer bei length(Punkte) - 1. Ein negativer, gebrochener oder zu großer Index ist ein Fehler; Indizes zählen nicht vom Ende her weiter.
Elemente können Rechnungen, Größen mit Einheiten oder andere Listen sein:
[2 * 45, 60 + 15] ergibt [90, 75][1.5 kg, 750 g] ergibt [1.5 kg, 750 g][[1, 2], [3, 4]][1][0] ergibt 3Bei verschachtelten Listen wählt der erste Index die innere Liste und der zweite einen Wert daraus: [1] wählt [3, 4], dann wählt [0] die 3.
Tausendertrennzeichen funktionieren auch innerhalb einer Liste, du kannst Zahlen also so einsetzen, wie sie geschrieben sind. Setz nach jedem Komma zwischen zwei Werten ein Leerzeichen; ein Komma, auf das drei Ziffern folgen, bleibt Teil der Zahl:
Gehälter = [£32,000, £41,500, £38,250] ergibt [£32,000.00, £41,500.00, £38,250.00]average(Gehälter) ergibt £37,250.00Worauf du achten solltest:
- Ohne Leerzeichen trennt jedes Komma,
[8200,10400]hat also zwei Werte. Eine Liste wie[100,200,300]kann eine Zahl oder drei sein, deshalb zeigt Varlig einen Fehler an, der beide Schreibweisen nennt. - Ergebnisse zeigen Tausendertrennzeichen und nach jedem Komma ein Leerzeichen,
[8,200, 10,400]ist also eine Liste mit zwei Werten. - Eine Liste enthält höchstens 1.024 Werte.
Kennzahlen
Punkte = [72, 85, 91, 64, 88]sum(Punkte) ergibt 400average(Punkte) ergibt 80median(Punkte) ergibt 85min(Punkte) ergibt 64max(Punkte) ergibt 91count(Punkte) ergibt 5mean und avg sind andere Namen für average, total für sum, stdev für stddev und count für length, Gewohnheiten aus Tabellenkalkulationen funktionieren also weiter. product multipliziert die Werte miteinander. Für den häufigsten Wert, ein Perzentil oder ein Quartil siehe weiter unten.
Bei einer benannten Liste kannst du die Kennzahl auch in Worten schreiben:
Punkte = [72, 85, 91, 64, 88]average of Punkte ergibt 80total of Punkte ergibt 400sum of, mean of, median of, min of, max of und count of funktionieren genauso. Schreib nach of einen Namen oder die Werte selbst, getrennt durch Kommas, mit oder ohne runde Klammern. Für Werte in eckigen Klammern nimm die Funktionsschreibweise, wie in average([72, 85, 91]).
Die meisten Kennzahlen, darunter sum, product, average, median, min, max, count und stddev, akzeptieren statt einer Liste auch einzelne Werte:
max(72, 85, 91) ergibt 91sum(1, 2, 3, 4) ergibt 10average of 70, 85, 91 ergibt 82mean of (1,2,3) ergibt 2average(1,200, 1,800) ergibt 1,500Die Zeilen darüber addieren
Eine Zeile, in der nur sum, total, subtotal, grand total, average, max oder min steht, ermittelt diese Kennzahl für die Ergebnisse darüber. Sie deckt ihren eigenen Abschnitt ab, der bei der vorherigen Summenzeile, einer Trennlinie --- oder einer Überschrift mit # beginnt. So bekommt jeder Teil einer Notiz schon beim Tippen seine eigene Kennzahl. Das funktioniert wie die Option Teilsumme im Kontextmenü einer Zeile:
# LebensmittelBrot = £1.20Milch = £1.45Eier = £2.30total ergibt £4.95# HaushaltMüllbeutel = £3.50Spülmittel = £1.80total ergibt £5.30Das Wort darf eine Beschriftung tragen, einen eigenen Namen bekommen, das Ergebnis umrechnen oder einen Kommentar hinter sich haben, damit sich die Zeile wie der Rest deiner Notiz liest:
Karten = 64 €Bahn = 41.20 €Geschätzte Summe: total ergibt €105.20Schätzung = total speichert die Zahl unter einem Namen, und total // noch zu buchen setzt eine Notiz daneben. total in kg rechnet vor der Anzeige um, was praktisch ist, wenn ein Abschnitt Gramm und Kilogramm mischt. Ein Kennzahlwort neben einem Operator ist die Zahl, die seine eigene Zeile zeigen würde, 5 € + subtotal addiert also einen Fünfer zur laufenden Summe.
# Pakete12 kg ergibt 12 kg4 kg ergibt 4 kg850 g ergibt 850 gtotal in kg ergibt 16.85 kgmax ergibt 12 kgHast du einem Wert den Namen sum oder total gegeben, zeigt die Zeile stattdessen deinen Wert. Steht darüber nichts, womit sich rechnen lässt, meldet die Zeile Unsupported: no amounts above to add up, statt leer zu bleiben oder eine Null zu zeigen. Meist liegt dann eine Überschrift dazwischen, an die du nicht mehr gedacht hast.
Jeder Betrag zählt genau einmal. Rechnet eine spätere Zeile im Abschnitt etwas aus einem benannten Betrag aus, zählt die Summe diese Zeile statt beider. Eine Einkaufsliste aus Stückpreisen und Mengen ergibt also das, was du tatsächlich zahlst:
Hemd = 18.50 € ergibt €18.50Shorts = 9 € ergibt €9.009 * Hemd ergibt €166.5010 * Shorts ergibt €90.00Gebühr = 40 € ergibt €40.00MwSt = Gebühr * 20% ergibt €8.00total ergibt €304.50Hemd und Shorts zählen innerhalb der beiden Zeilen, die sie verwenden, während Gebühr in der Summe bleibt, weil MwSt nur einen Anteil davon nimmt.
Das folgt einer Kette von Namen, so weit sie reicht. Teilt eine Notiz einen Betrag in Anteile auf und addiert die Anteile dann wieder, zählt die Zeile, die sie addiert, und ebenso der Betrag, von dem sie Anteile waren:
Topf = 900 € ergibt €900.00erster = 50% of Topf ergibt €450.00zweiter = 30% of Topf ergibt €270.00dritter = 20% of Topf ergibt €180.00erster + zweiter + dritter ergibt €900.00total ergibt €900.00Addiert wird nur Gleichartiges. Prozentsätze, Raten und reine Anzahlen bleiben draußen, wenn darüber Geld oder eine Menge steht, und eine Zeile mit einem Fehler ebenfalls. Reine Zahlen, die als Spalte eingefügt sind, werden addiert, wenn sie wie die Beträge auf den Cent genau geschrieben sind; eine Zahl mit mehr Nachkommastellen, etwa ein Wechselkurs oder ein Faktor, bleibt draußen. Der Hinweis an der Summe nennt alles, was sie ausgelassen hat, etwa „Leaves out line 3 (Personen = 2)“ oder „Leaves out line 2 (an error)“. So siehst du auf einen Blick, was in der Zahl steckt.
Eine Liste aus zwei oder mehr Beträgen ohne Namen, direkt über der Summe und unter einer Zeile, die aus Namen berechnet ist, wird für sich addiert. So zählt ein Budget am Anfang der Notiz nicht noch einmal in der Liste darunter mit:
Budget = 18,000 € ergibt €18,000.00Rest = Budget - 6,388.25 € ergibt €11,611.75- Container 250 € ergibt €250.00- Grundreinigung 120 € ergibt €120.00subtotal ergibt €370.00Um Zeilen zu summieren, die nicht nebeneinanderstehen, beschriftest du sie stattdessen mit einem Tag.
Die häufigsten Werte
mode liefert den Wert, der öfter vorkommt als jeder andere, und modes liefert als Liste alle
Werte, die gleich häufig ganz vorn liegen:
Noten = [3, 4, 4, 5, 5, 5, 6]mode(Noten) ergibt 5modes([1, 1, 2, 2, 3]) ergibt [1, 2]mode antwortet nur, wenn genau ein Wert der häufigste ist. Wiederholt sich nichts oder liegen
mehrere Werte gleichauf, sagt es das, statt sich einen herauszupicken:
mode([1, 2, 3]) ergibt Unsupported: No value repeats, so this list has no mode; use median or average insteadPerzentile und Quartile
percentile(Liste, Rang) nimmt einen Rang von 0 bis 100 und liefert den Wert an dieser Stelle,
wobei es zwischen den beiden nächstgelegenen Beobachtungen interpoliert. quartile(Liste, k) ist
dasselbe in Vierteln, mit k von 0 bis 4, quartile(Liste, 1) ist also percentile(Liste, 25):
Punkte = [72, 85, 91, 64, 88]percentile(Punkte, 50) ergibt 85percentile(Punkte, 25) ergibt 72quartile(Punkte, 3) ergibt 88quartile(Punkte, 4) ergibt 91percentile([1, 2, 3, 4], 25) ergibt 1.75quartile([1, 2, 3, 4], 3) ergibt 3.25Das 50. Perzentil ist der Median, und das 0. und das 100. — quartile(Liste, 0) und
quartile(Liste, 4) — sind der kleinste und der größte Wert, genau wie min und max. Ein Rang
außerhalb seines Bereichs ist ein Fehler und nicht der nächstgelegene Wert, der noch passen würde:
percentile([1, 2, 3, 4], 101) ergibt Unsupported: A percentile is between 0 and 100quartile([1, 2, 3, 4], 5) ergibt Unsupported: A quartile is 0, 1, 2, 3 or 4Streuung: Varianz und Standardabweichung
Punkte = [72, 85, 91, 64, 88]variance(Punkte) ergibt 132.5stddev(Punkte) to 1 dp ergibt 11.5Beides sind Stichproben-Kennzahlen: Sie teilen durch die Anzahl der Werte minus eins (n - 1), die übliche Wahl, wenn deine Zahlen eine Stichprobe aus etwas Größerem sind. Sie brauchen mindestens zwei Werte. Hänge to 1 dp an eine beliebige Kennzahl an, um sie zu runden.
Ist deine Liste die gesamte Grundgesamtheit statt einer Stichprobe, nimm die Formen für die Grundgesamtheit, die durch n teilen und nur einen Wert brauchen:
# Zugverspätungen in MinutenVerspätungen = [2, 4, 4, 4, 5, 5, 7, 9]sample_variance(Verspätungen) ergibt 4.5714285714population_variance(Verspätungen) ergibt 4sample_stddev(Verspätungen) ergibt 2.1380899353population_stddev(Verspätungen) ergibt 2| Aufruf | Teilt die quadrierten Abweichungen durch | Braucht |
|---|---|---|
variance, sample_variance |
n - 1 |
Zwei Werte |
population_variance |
n |
Einen Wert |
stddev, stdev, sample_stddev |
n - 1 |
Zwei Werte |
population_stddev |
n |
Einen Wert |
sample_variance und sample_stddev sind längere Namen für variance und stddev, du kannst also ausschreiben, welche du meinst. Die kurzen Namen waren immer schon die Stichprobenformen und sind es weiterhin.
Listen mit Einheiten
sum, average, median, mode, modes, percentile, quartile, min, max, stddev und population_stddev behalten Einheiten bei und rechnen zwischen kompatiblen Einheiten um. Die Werte werden in der Einheit des ersten gelesen, und in ihr kommt das Ergebnis zurück:
Arbeitswege = [24 min, 31 min, 27 min, 22 min]sum(Arbeitswege) ergibt 1 hour 44 minaverage(Arbeitswege) ergibt 26 minmedian(Arbeitswege) ergibt 25.5 minpercentile(Arbeitswege, 25) ergibt 23.5 minpopulation_stddev(Arbeitswege) ergibt 3.3911649916 minsum([1 kg, 500 g]) ergibt 1.5 kgmodes([1 kg, 500 g, 1 kg, 500 g]) ergibt [0.5 kg, 1 kg]Die Varianzen sind die Ausnahme: Sie quadrieren ihre Beobachtungen, und keine Einheit übersteht das, deshalb nehmen sie nur reine Zahlen.
sample_variance([1 kg, 2 kg]) ergibt Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unitAuch sort funktioniert nur mit reinen Zahlen. Eine Kennzahl über Werte mit inkompatiblen Einheiten, etwa sum([1 kg, 3 m]), führt zu einem Fehler, statt stillschweigend Werte auszulassen.
Die Regeln zur Exaktheit hinter all dem stehen unter Was der Rechner garantiert.
Leere Listen
| Aufruf mit einer leeren Liste | Ergebnis |
|---|---|
sum([]) |
0 |
product([]) |
1 |
count([]), length([]) |
0 |
average([]), median([]), min([]), max([]) |
Fehler |
variance([]), stddev([]) |
Fehler |
Eine leere Liste entsteht meistens durch ein filter, auf das nichts zutraf, deshalb kann ein average über eine gefilterte Liste fehlschlagen, auch wenn die ursprüngliche Liste Werte enthält.
Tags
Ein Tag ist eine # mit einem direkt angehängten Wort, etwa #essen. Schreib ihn irgendwo in eine Zeile, um sie zu beschriften. Der Tag nimmt an der Rechnung nicht teil, die Zeile zeigt also weiter ihr eigenes Ergebnis, und er gruppiert sie mit jeder anderen Zeile, die denselben Tag trägt. total of #essen addiert diese Zeilen dann:
12.50 € Mittagessen #essen ergibt €12.508 € Kaffee #essen ergibt €8.00Flüge = 420 € #reise ergibt €420.00total of #essen ergibt €20.50Genau das kann ein Tag, was eine Zwischensumme nicht kann: Die Zeilen müssen nicht nebeneinanderstehen. Eine Woche Ausgaben, eine Reise und eine Einkaufsliste passen in einen Block, jede mit ihrer eigenen Zahl am Ende. Halt den Zeiger über einen Tag, um zu sehen, worauf er sich bisher summiert.
Jede Kennzahl funktioniert mit einem Tag. of ist optional, der Tag darf vor oder hinter dem Wort stehen, und das Ergebnis nimmt eine Beschriftung oder einen eigenen Namen an, wie jede andere Zeile auch:
#essen 12.50 € ergibt €12.50#essen 8 € ergibt €8.00420 € #reise ergibt €420.00total of #essen ergibt €20.50average of #essen ergibt €10.25count of #essen ergibt 2min of #essen ergibt €8.00max of #essen ergibt €12.50#essen total ergibt €20.50Essen diese Woche: sum of #essen ergibt €20.50gegessen = avg #essen ergibt €10.25sum, total, average, avg, mean, count, min und max lesen sich alle so.
Eine Tag-Kennzahl steht dort, wo auch ein Betrag steht, eine Rechnung kann also von ihr aus weitergehen. So ziehst du eine Anzahlung von einer laufenden Summe ab, rechnest sie hoch oder stellst zwei Tags gegeneinander:
20 € Einkauf #essen ergibt €20.0030 € Restaurant #essen ergibt €30.00total of #essen - 10 € ergibt €40.002 * total of #essen ergibt €100.00Küchenausstattung: total of #essen ergibt €50.00Eine Zeile darf so viele Tags tragen, wie du willst, und jeder zählt sie. Nennst du zwei Tags in einer Formulierung, bekommst du die Zeilen, die beide tragen:
50 € Abendessen #reise #essen ergibt €50.0030 € Taxi #reise ergibt €30.009 € Sandwich #essen ergibt €9.00total of #reise ergibt €80.00total of #essen ergibt €59.00total of #reise #essen ergibt €50.00Was eine Tag-Summe abdeckt
Eine Tag-Formulierung sieht sich genau dieselben Zeilen an wie ein einfaches total und folgt denselben Regeln:
- Sie deckt ihren eigenen Abschnitt ab, zurück bis zur vorherigen Summe, einer Trennlinie
---oder einer Überschrift mit#. - Sie addiert nur Gleichartiges. Prozentsätze, Raten, reine Anzahlen und Zeilen mit Fehlern bleiben draußen, und der Hinweis nennt sie, etwa „Leaves out line 2 (Personen = 2)“.
- Jeder Betrag zählt genau einmal: Ein getaggter Preis, den eine spätere getaggte Zeile multipliziert, zählt in dieser Zeile statt in beiden.
Eine Überschrift genügt also, um das #essen der einen Woche von dem der nächsten zu trennen:
# Woche 120 € Mittagessen #essen ergibt €20.00total of #essen ergibt €20.00# Woche 230 € Mittagessen #essen ergibt €30.00total of #essen ergibt €30.00Gibt es nichts zu addieren, sagt die Zeile das, statt leer zu bleiben oder eine Null zu zeigen. Meist steckt dann ein Tippfehler im Tag oder eine vergessene Überschrift dahinter:
12.50 € Mittagessen #essen ergibt €12.50total of #getraenke ergibt Unsupported: no lines tagged #getraenke aboveKlempner anrufen #aufgabentotal of #aufgaben ergibt Unsupported: no amounts tagged #aufgaben aboveTag-Namen schreiben
Ein Tag-Name darf Buchstaben, Ziffern, _, - und / enthalten, #q1-2026 und #reise/lissabon sind also je ein Name. Groß- und Kleinschreibung spielt keine Rolle:
20 € Flug #reise/lissabon ergibt €20.0035 € Hotel #Reise/Lissabon ergibt €35.00total of #reise/lissabon ergibt €55.00Eine #, die nicht an einem Wort hängt, behält ihre alte Bedeutung, an dem, was du schon schreibst, ändert sich also nichts:
| Du schreibst | Was es ist |
|---|---|
# Wocheneinkauf |
Ein Kommentar, wegen des Leerzeichens nach der Raute |
5 + 5 # Kommentar |
Dasselbe: Alles nach der Raute wird ignoriert |
C#4 in Hz |
Ein musikalisches Kreuz, weil die Raute am Notenbuchstaben hängt |
#1, Rechnung #123 |
Eine Nummer, kein Tag: Ein Tag-Name beginnt nicht mit einer Ziffer |
#ff0000, #fff |
Ein Farbcode |
varlig.app/docs#tags |
Eine Webadresse mit Anker |
Ein Tag-Name muss mit einem Buchstaben beginnen, und drei, vier, sechs oder acht Hexadezimalziffern nach der Raute werden als Farbe gelesen. #fee ist also eine Farbe, #fees ein Tag.
Tags in einer Notiz und Tags in einem Block
Die Tags, die deine Notizen in der Seitenleiste ordnen, sind unter Tags, Links und Backlinks beschrieben. Sie enden am Rand eines Rechenblocks: Ein #essen, das du im Block schreibst, beschriftet die Zeile für ihre Summe und taucht nie in der Seitenleiste auf, und ein #essen in der Notiz um den Block herum ordnet die Notiz ein, ohne deine Rechnungen anzufassen. Schreib den Tag an beide Stellen, wenn du beides willst, und beachte den einen Unterschied: Ein Tag in einer Notiz darf Leerzeichen enthalten, wenn du ihn mit einer zweiten # abschließt, während ein Tag in einem Rechenblock immer am ersten Leerzeichen endet.
Listenreferenz
| Aufruf | Was er macht |
|---|---|
range(Start,Ende) |
Ganze Zahlen von Start bis Ende, beide Enden eingeschlossen |
range(Start,Ende,Schritt) |
Zählt in Schritten von Schritt, auch negativ oder gebrochen, aber nicht null |
length(Liste), count(Liste) |
Anzahl der Werte |
sort(Liste) |
Vom kleinsten zum größten Wert; nur reine Zahlen |
reverse(Liste) |
Dieselben Werte in umgekehrter Reihenfolge; beliebige Werte |
unique(Liste) |
Behält das erste Vorkommen jedes Werts |
slice(Liste,Start,Ende) |
Werte ab Index Start bis ausschließlich Index Ende |
map(Ausdruck,Variable,Liste) |
Berechnet den Ausdruck einmal für jeden Wert |
filter(Bedingung,Variable,Liste) |
Behält die Werte, für die die Bedingung true ist |
range(1, 5) ergibt [1, 2, 3, 4, 5]range(0, 100, 25) ergibt [0, 25, 50, 75, 100]range(10, 0, -2) ergibt [10, 8, 6, 4, 2, 0]Punkte = [72, 85, 91, 64, 88]sort(Punkte) ergibt [64, 72, 85, 88, 91]reverse(sort(Punkte)) ergibt [91, 88, 85, 72, 64]slice(sort(Punkte), 0, 3) ergibt [64, 72, 85]unique([4, 2, 4, 6, 2]) ergibt [4, 2, 6]reverse(sort(…)) liefert den größten Wert zuerst, und slice(sort(…), 0, 3) greift die drei niedrigsten heraus.
Für die Grenzen von slice muss 0 <= Start <= Ende <= Länge gelten. Sind Start und Ende gleich, entsteht eine leere Liste. Eine Kurzform wie Punkte[0:2] gibt es nicht; schreib slice(Punkte, 0, 2).
unique vergleicht Werte genau so, wie sie gespeichert sind, 1 kg und 1000 g zählen also als zwei verschiedene Werte, und zwei Ergebnisse, die sich in der zehnten Nachkommastelle unterscheiden, werden nicht zusammengefasst.
Map und filter
map berechnet einen Ausdruck für jeden Wert einer Liste. filter behält die Werte, die eine Prüfung bestehen. In beiden Fällen kommt zuerst der Ausdruck, dann ein Name, der für jeden einzelnen Wert steht, dann die Liste:
Punkte = [72, 85, 91, 64, 88]map(s + 5, s, Punkte) ergibt [77, 90, 96, 69, 93]filter(s >= 80, s, Punkte) ergibt [85, 91, 88]count(filter(s >= 80, s, Punkte)) ergibt 3average(filter(s >= 80, s, Punkte)) ergibt 88Lies filter(s >= 80, s, Punkte) als „die Werte s in Punkte, für die s >= 80 gilt“. Beide funktionieren mit Einheiten und Geld:
map(p * 1.2, p, [£10, £25, £40]) ergibt [£12.00, £30.00, £48.00]Ausgaben = [£42.50, £18.20, £65.00, £23.30]filter(x > £30, x, Ausgaben) ergibt [£42.50, £65.00]sum(filter(x > £30, x, Ausgaben)) ergibt £107.50Der gewählte Name existiert nur innerhalb des Aufrufs. Er ändert keinen gleichnamigen Wert an anderer Stelle der Notiz:
x = 10map(x * 2, x, [1, 2, 3]) ergibt [2, 4, 6]x ergibt 10Die Bedingung in filter muss ein Vergleich oder ein anderer Wahrheitswert sein. Eine reine Zahl gilt nicht als wahr, filter(x, x, [0, 1, 2]) ist also ein Fehler. Eine leere Liste mit map oder filter zu bearbeiten ergibt eine leere Liste.
Rechnen mit Listen
Du kannst jeden Wert mit einer einzelnen Zahl multiplizieren oder durch sie teilen und zwei gleich lange Listen Wert für Wert addieren oder subtrahieren:
[30, 36, 22] / 40 * 100 ergibt [75, 90, 55]2 * [3, 1, 4] ergibt [6, 2, 8]-[5, -3] ergibt [-5, 3]Probeklausur = [62, 70, 60]Klausur = [72, 78, 69]Klausur - Probeklausur ergibt [10, 8, 9]average(Klausur - Probeklausur) ergibt 9[1 kg, 2 kg] + [500 g, 500 g] ergibt [1.5 kg, 2.5 kg][72, 85] == [72, 85] ergibt trueDie erste Zeile macht aus Punkten von maximal 40 Prozentwerte. Die Zeile Klausur - Probeklausur stellt das Ergebnis der Probeklausur jeder Person ihrem Klausurergebnis gegenüber.
Einige Operationen werden bei Listen nicht unterstützt:
- Eine einzelne Zahl zu einer Liste addieren, wie in
Punkte + 5. Nimm stattdessenmap(s + 5, s, Punkte). - Listen unterschiedlicher Länge addieren. Werte werden nie wiederholt, um die Längen anzugleichen.
- Zwei flache Listen mit
*multiplizieren. Für die Summe der paarweisen Produkte nimmdot:dot([2, 3, 1], [4, 5, 10])ist33, etwa zwei Kaffee zu je 4, drei Tee zu je 5 und ein Stück Kuchen zu 10. Zwischen Listen aus Zeilen ist*die Matrixmultiplikation, die unter Vektoren und Matrizen erklärt wird.
Listen aus Zeilen
Eine Liste aus Zeilen funktioniert wie eine kleine Tabelle. average und sum rechnen die Spalten hinunter, und map kann über die Zeilen hinweg rechnen:
# Jede Zeile ist eine Person: [Probeklausur, Klausur]Ergebnisse = [[62, 72], [70, 78], [60, 69]]average(Ergebnisse) ergibt [64, 73]sum(Ergebnisse) ergibt [192, 219]map(average(r), r, Ergebnisse) ergibt [67, 74, 64.5]median, min, max und stddev akzeptieren keine Listen aus Zeilen. Nimm map über die Zeilen, wie in der letzten Zeile, oder zieh eine Spalte in eine eigene Liste heraus.
Die genauen Regeln für all diese Operationen stehen in der Referenz Höhere Mathematik: Möglichkeiten und Grenzen.
Alles zusammen
Hier ist eine Woche voller Schrittzahlen von einer Uhr, mit einem Tagesziel:
# Schritte, Montag bis SonntagSchritte = [8200, 10400, 6300, 12000, 9100, 7400, 9600]Ziel = 9000sum(Schritte) ergibt 63,000average(Schritte) ergibt 9,000median(Schritte) ergibt 9,100Tage mit erreichtem Ziel: count(filter(s >= Ziel, s, Schritte)) ergibt 4Spanne: max(Schritte) - min(Schritte) ergibt 5,700# Etwa 0,75 m pro SchrittStrecke = sum(Schritte) * 0.75 mStrecke in km ergibt 47.25 kmDer Durchschnitt liegt genau auf dem Ziel, erreicht wurde es aber nur an vier Tagen, und zwischen dem besten und dem schlechtesten Tag liegen 5.700 Schritte. Ändere Ziel oder füge die Zahlen der nächsten Woche ein, und jede Zeile aktualisiert sich.