Listes et statistiques
Une liste regroupe plusieurs valeurs sous un seul nom : pas quotidiens d’une semaine, notes d’examen, reçus d’un mois… Vous pouvez ensuite calculer leur somme, leur moyenne ou leur dispersion, et sélectionner les valeurs pertinentes.
Cette page présente la création et l’indexation des listes, les statistiques descriptives, les totaux des lignes précédentes, les tags pour totaliser des lignes où qu’elles se trouvent, le tri et l’extraction de sous-listes, les transformations avec map et filter, ainsi que les opérations sur des listes entières. Consultez-la pour résumer une colonne de valeurs. Des listes de lignes peuvent aussi former des matrices, décrites sur une page dédiée.
Écrire une liste
Mettez les valeurs entre crochets, séparées par des virgules :
scores = [72, 85, 91, 64, 88] donne [72, 85, 91, 64, 88]scores[0] donne 72scores[4] donne 88length(scores) donne 5La position d’une valeur dans la liste est son indice, écrit entre crochets après la liste. Les indices commencent à zéro : scores[0] est la première note et scores[4] la cinquième. Le dernier élément est toujours à l’indice length(scores) - 1. Un indice négatif, non entier ou trop grand produit une erreur ; les indices ne repartent pas de la fin de la liste.
Les éléments peuvent être des calculs, des quantités avec des unités ou d'autres listes :
[2 * 45, 60 + 15] donne [90, 75][1.5 kg, 750 g] donne [1.5 kg, 750 g][[1, 2], [3, 4]][1][0] donne 3Dans une liste imbriquée, le premier indice sélectionne la sous-liste, et le second une de ses valeurs : [1] sélectionne [3, 4], puis [0] sélectionne 3.
Les séparateurs de milliers sont acceptés dans les listes : vous pouvez donc coller les nombres tels qu’ils sont écrits. Placez un espace après chaque virgule séparant deux valeurs ; une virgule suivie de trois chiffres reste ainsi dans le nombre.
salaries = [£32,000, £41,500, £38,250] donne [£32,000.00, £41,500.00, £38,250.00]average(salaries) donne £37,250.00Quelques points à connaître :
- Sans espaces, chaque virgule sépare des valeurs :
[8200,10400]contient donc deux valeurs. Une écriture comme[100,200,300]pouvant désigner un seul nombre ou trois, Varlig affiche une erreur précisant les deux interprétations. - Les résultats utilisent les séparateurs de milliers et un espace après chaque virgule entre valeurs :
[8,200, 10,400]est donc une liste de deux valeurs. - Une liste contient au plus 1 024 valeurs.
Statistiques descriptives
scores = [72, 85, 91, 64, 88]sum(scores) donne 400average(scores) donne 80median(scores) donne 85min(scores) donne 64max(scores) donne 91count(scores) donne 5mean et avg sont des alias d’average, total de sum, stdev de stddev et count de length, pour retrouver les habitudes des tableurs. product multiplie les valeurs entre elles. Pour la valeur la plus fréquente, un centile ou un quartile, voir ci-dessous.
Avec une liste nommée, vous pouvez également écrire la statistique en mots :
scores = [72, 85, 91, 64, 88]average of scores donne 80total of scores donne 400sum of, mean of, median of, min of, max of et count of fonctionnent de la même façon. Après of, écrivez un nom ou les valeurs séparées par des virgules, avec ou sans parenthèses. Pour des valeurs entre crochets, utilisez la forme fonctionnelle, comme average([72, 85, 91]).
La plupart des statistiques, y compris sum, product, average, median, min, max, count et stddev, acceptent également des valeurs distinctes au lieu d'une liste :
max(72, 85, 91) donne 91sum(1, 2, 3, 4) donne 10average of 70, 85, 91 donne 82mean of (1,2,3) donne 2average(1,200, 1,800) donne 1,500Additionner les lignes précédentes
Une ligne contenant uniquement sum, total, subtotal, grand total, average, max ou min calcule la statistique correspondante pour les résultats précédents. Elle porte sur sa section, délimitée par le total précédent, un séparateur --- ou un titre #. Chaque partie de la note obtient ainsi son propre résultat pendant la saisie. Cela fonctionne comme l’option Subtotal du menu contextuel d’une ligne :
# Groceriesbread = £1.20milk = £1.45eggs = £2.30total donne £4.95# Householdbin bags = £3.50washing up liquid = £1.80total donne £5.30Vous pouvez accompagner ce mot d’une étiquette, attribuer un nom au résultat, le convertir ou ajouter un commentaire à la suite, pour l’intégrer au reste de la note :
tickets = £64train = £41.20Estimated total: total donne £105.20est = total mémorise le résultat sous un nom, et total // still to book ajoute un commentaire. total in kg convertit le résultat avant l’affichage, ce qui est utile quand une section mélange grammes et kilogrammes. À côté d’un opérateur, le mot statistique vaut ce qu’il afficherait seul sur une ligne : £5 + subtotal ajoute donc 5 £ au total courant.
# Parcels12 kg donne 12 kg4 kg donne 4 kg850 g donne 850 gtotal in kg donne 16.85 kgmax donne 12 kgSi vous avez nommé une valeur sum ou total, c’est elle qui s’affiche. Lorsqu’il n’y a aucun montant précédent à traiter, la ligne affiche Unsupported: no amounts above to add up plutôt qu’un résultat vide ou nul. Cela vient souvent d’un titre oublié qui délimite la section.
Chaque montant n’est compté qu’une fois. Si une ligne ultérieure de la section calcule une valeur à partir d’un montant nommé, le total compte cette ligne plutôt que les deux. Une liste de courses avec prix unitaires et quantités donne ainsi le montant réellement à payer :
shirt = £18.50shorts = £99 * shirt donne £166.5010 * shorts donne £90.00fee = £40vat = fee * 20% donne £8.00total donne £304.50shirt et shorts sont comptés par les deux lignes qui les utilisent. En revanche, fee reste dans le total, car vat n’en représente qu’une part.
Cette règle suit toute la chaîne des valeurs nommées. Si une note divise un montant en parts puis additionne ces parts, le total compte la ligne qui les additionne ainsi que le montant initial :
pot = £9001st = 50% of pot donne £450.002nd = 30% of pot donne £270.003rd = 20% of pot donne £180.001st + 2nd + 3rd donne £900.00total donne £900.00Seuls les montants de même nature sont additionnés. En présence d’un montant monétaire ou d’une quantité, les pourcentages, taux et simples dénombrements sont exclus, ainsi que les lignes en erreur. Les nombres sans unité collés en colonne sont inclus s’ils sont écrits au centime, comme les montants. Ceux qui ont davantage de décimales, tels qu’un taux de change ou un coefficient, sont exclus. L’indication du total détaille chaque exclusion, par exemple « Ligne 3 exclue (people = 2) » ou « Ligne 2 exclue (erreur) », pour comprendre immédiatement ce que comprend le résultat.
Une suite d’au moins deux montants sans nom, juste au-dessus du total et sous une ligne calculée à partir de valeurs nommées, est additionnée séparément. Ainsi, un budget calculé en haut de la note n’est pas compté à nouveau dans la liste qui suit :
budget = £18,000remaining = budget - £6,388.25 donne £11,611.75- skip hire £250 donne £250.00- deep clean £120 donne £120.00subtotal donne £370.00Pour additionner des lignes non consécutives, attribuez-leur un tag.
Valeurs les plus fréquentes
mode donne la valeur la plus fréquente ; modes donne une liste de toutes les valeurs ex æquo pour la fréquence maximale :
marks = [3, 4, 4, 5, 5, 5, 6]mode(marks) donne 5modes([1, 1, 2, 2, 3]) donne [1, 2]mode ne donne un résultat que si une seule valeur est strictement la plus fréquente. Si aucune ne se répète ou si plusieurs sont ex æquo, il le signale au lieu d’en choisir une :
mode([1, 2, 3]) donne Unsupported: No value repeats, so this list has no mode; use median or average insteadCentiles et quartiles
percentile(list, rank) accepte un rang de 0 à 100 et donne la valeur correspondante, par interpolation entre les deux observations voisines. quartile(list, k) fait de même par quarts, avec k de 0 à 4 : quartile(list, 1) équivaut donc à percentile(list, 25).
scores = [72, 85, 91, 64, 88]percentile(scores, 50) donne 85percentile(scores, 25) donne 72quartile(scores, 3) donne 88quartile(scores, 4) donne 91percentile([1, 2, 3, 4], 25) donne 1.75quartile([1, 2, 3, 4], 3) donne 3.25Le 50e centile est la médiane. Les centiles 0 et 100, soit quartile(list, 0) et quartile(list, 4), sont le minimum et le maximum, comme min et max. Un rang hors de l’intervalle accepté produit une erreur, sans être ramené à la borne la plus proche :
percentile([1, 2, 3, 4], 101) donne Unsupported: A percentile is between 0 and 100quartile([1, 2, 3, 4], 5) donne Unsupported: A quartile is 0, 1, 2, 3 or 4Dispersion : variance et écart-type
scores = [72, 85, 91, 64, 88]variance(scores) donne 132.5stddev(scores) to 1 dp donne 11.5Ces deux statistiques portent sur un échantillon : elles utilisent un diviseur égal au nombre de valeurs moins un (n - 1), le choix habituel pour un échantillon d’une population plus vaste. Il faut au moins deux valeurs. Ajoutez to 1 dp après une statistique pour l’arrondir.
Si la liste représente toute la population, utilisez les formes correspondantes : elles divisent par n et n’exigent qu’une seule valeur.
# Train delays in minutesdelays = [2, 4, 4, 4, 5, 5, 7, 9]sample_variance(delays) donne 4.5714285714population_variance(delays) donne 4sample_stddev(delays) donne 2.1380899353population_stddev(delays) donne 2| Appel | Divise la somme des écarts au carré par | Valeurs nécessaires |
|---|---|---|
variance, sample_variance |
n - 1 |
Deux valeurs |
population_variance |
n |
Une valeur |
stddev, stdev, sample_stddev |
n - 1 |
Deux valeurs |
population_stddev |
n |
Une valeur |
sample_variance et sample_stddev sont les noms explicites de variance et stddev. Les noms courts désignent toujours les versions pour échantillon, comme auparavant.
Listes avec unités
sum, average, median, mode, modes, percentile, quartile, min, max, stddev et population_stddev conservent les unités et convertissent celles qui sont compatibles. Toutes les valeurs sont lues dans l’unité de la première, qui devient aussi celle du résultat :
commutes = [24 min, 31 min, 27 min, 22 min]sum(commutes) donne 1 hour 44 minaverage(commutes) donne 26 minmedian(commutes) donne 25.5 minpercentile(commutes, 25) donne 23.5 minpopulation_stddev(commutes) donne 3.3911649916 minsum([1 kg, 500 g]) donne 1.5 kgmodes([1 kg, 500 g, 1 kg, 500 g]) donne [0.5 kg, 1 kg]Les variances font exception : leur calcul élève les observations au carré et ne conserve pas les unités. Elles n’acceptent donc que les nombres sans unité.
sample_variance([1 kg, 2 kg]) donne Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unitsort n’accepte également que les nombres sans unité. Une statistique portant sur des unités incompatibles, comme sum([1 kg, 3 m]), produit une erreur au lieu d’ignorer discrètement certaines valeurs.
Les règles d’exactitude de ces calculs sont décrites dans Garanties du moteur.
Listes vides
| Appel sur une liste vide | Résultat |
|---|---|
sum([]) |
0 |
product([]) |
1 |
count([]), length([]) |
0 |
average([]), median([]), min([]), max([]) |
Erreur |
variance([]), stddev([]) |
Erreur |
Une liste vide résulte souvent d’un filter sans correspondance. Calculer l’average d’une liste filtrée peut donc échouer même si la liste d’origine contient des valeurs.
Tags
Un tag est un # directement suivi d’un mot, comme #food. Placez-le n’importe où sur une ligne pour l’étiqueter. Le tag ne modifie pas le calcul : la ligne conserve son propre résultat, tout en rejoignant les autres lignes portant le même tag. total of #food additionne ensuite ces lignes :
£12.50 lunch #food donne £12.50£8 coffee #food donne £8.00flights = £420 #trip donne £420.00total of #food donne £20.50Les tags permettent ce qu’un sous-total ne permet pas : regrouper des lignes non consécutives. Les dépenses d’une semaine, un voyage et une liste de courses peuvent partager un même bloc, chacun avec son total en bas. Survolez un tag pour voir le total cumulé jusqu’à cet endroit.
Toutes les statistiques fonctionnent sur un tag. of est facultatif et le tag peut précéder ou suivre le mot. Comme sur toute autre ligne, vous pouvez attribuer une étiquette ou un nom au résultat :
#food £12.50#food £8£420 #triptotal of #food donne £20.50average of #food donne £10.25count of #food donne 2min of #food donne £8.00max of #food donne £12.50#food total donne £20.50Food this week: sum of #food donne £20.50eaten = avg #food donne £10.25sum, total, average, avg, mean, count, min et max sont tous lus de cette façon.
Une statistique sur un tag s’utilise comme un montant et peut entrer dans un calcul plus long. Vous pouvez ainsi déduire un acompte du total courant, multiplier ce total ou comparer deux tags :
£20 shop #food donne £20.00£30 meal out #food donne £30.00total of #food - £10 donne £40.002 * total of #food donne £100.00Cooking kit: total of #food donne £50.00Une ligne peut porter autant de tags que nécessaire ; elle est prise en compte pour chacun. Indiquer deux tags dans une même expression sélectionne les lignes qui portent les deux :
£50 dinner #trip #food donne £50.00£30 taxi #trip donne £30.00£9 sandwich #food donne £9.00total of #trip donne £80.00total of #food donne £59.00total of #trip #food donne £50.00Valeurs incluses dans le total d’un tag
Une expression portant sur un tag examine les mêmes lignes qu’un simple total, selon les mêmes règles :
- Elle couvre sa section, jusqu’au total précédent, au séparateur
---ou au titre#. - Elle additionne uniquement les montants de même nature. Pourcentages, taux, dénombrements et lignes en erreur sont exclus. L’indication précise lesquels, par exemple « Ligne 2 exclue (people = 2) ».
- Chaque montant n’est compté qu’une fois : si une ligne avec un tag multiplie un prix portant ce tag, seule cette ligne est comptée, pas les deux.
Un titre suffit donc pour séparer les dépenses #food d’une semaine de celles de la suivante :
# Week 1£20 lunch #food donne £20.00total of #food donne £20.00# Week 2£30 lunch #food donne £30.00total of #food donne £30.00En l’absence de montants à additionner, la ligne le signale plutôt que d’afficher un résultat vide ou nul. Il s’agit souvent d’une faute dans le tag ou d’un titre oublié qui délimite la section :
£12.50 lunch #food donne £12.50total of #drinks donne Unsupported: no lines tagged #drinks abovering the plumber #jobstotal of #jobs donne Unsupported: no amounts tagged #jobs aboveÉcrire les noms des tags
Un nom de tag accepte les lettres, les chiffres, _, - et / : #q1-2026 et #trip/lisbon forment chacun un seul nom. La casse est sans importance :
£20 flight #trip/lisbon donne £20.00£35 hotel #Trip/Lisbon donne £35.00total of #trip/lisbon donne £55.00Un # qui n’est pas directement suivi d’un mot conserve son sens habituel : les expressions existantes ne changent pas.
| Vous saisissez | Ce que c'est |
|---|---|
# Weekly shop |
Un commentaire, à cause de l’espace après le croisillon |
5 + 5 # comment |
Même résultat : tout ce qui suit le croisillon est ignoré |
C#4 in Hz |
Un dièse musical, car le signe est accolé à la note |
#1, Invoice #123 |
Un nombre, pas un tag : le nom d’un tag ne peut pas commencer par un chiffre |
#ff0000, #fff |
Un code couleur |
varlig.app/docs#tags |
Une adresse web avec un fragment |
Un nom de tag doit commencer par une lettre. Trois, quatre, six ou huit chiffres hexadécimaux après le dièse sont interprétés comme une couleur : #fee est donc une couleur, tandis que #fees est un tag.
Tags d’une note et tags d’un bloc
Les tags qui organisent les notes dans la barre latérale sont décrits dans Tags, liens et liens entrants. Ils ne franchissent pas les limites des blocs de calcul : #food dans un bloc étiquette une ligne pour les totaux et n’apparaît jamais dans la barre latérale ; #food dans le texte autour du bloc classe la note sans agir sur les calculs. Écrivez le tag aux deux endroits pour obtenir les deux effets. Une différence demeure : dans une note, un tag peut contenir des espaces s’il se termine par un second # ; dans un bloc de calcul, il s’arrête toujours au premier espace.
Référence des listes
| Appel | Effet |
|---|---|
range(start,end) |
Nombres entiers de start à end, y compris les deux extrémités |
range(start,end,step) |
Avance par pas de step, qui peut être négatif ou fractionnaire, mais pas nul |
length(list), count(list) |
Nombre de valeurs |
sort(list) |
Du plus petit au plus grand ; nombres simples uniquement |
reverse(list) |
Les mêmes valeurs dans l’ordre inverse ; tout type de valeur |
unique(list) |
Conserver la première occurrence de chaque valeur |
slice(list,start,end) |
Valeurs à partir de l’indice start, inclus, jusqu’à l’indice end, exclu |
map(expression,variable,list) |
Évalue l’expression une fois pour chaque valeur |
filter(condition,variable,list) |
Conserve les valeurs pour lesquelles la condition est true |
range(1, 5) donne [1, 2, 3, 4, 5]range(0, 100, 25) donne [0, 25, 50, 75, 100]range(10, 0, -2) donne [10, 8, 6, 4, 2, 0]scores = [72, 85, 91, 64, 88]sort(scores) donne [64, 72, 85, 88, 91]reverse(sort(scores)) donne [91, 88, 85, 72, 64]slice(sort(scores), 0, 3) donne [64, 72, 85]unique([4, 2, 4, 6, 2]) donne [4, 2, 6]reverse(sort(…)) trie dans l’ordre décroissant, et slice(sort(…), 0, 3) extrait les trois plus petites valeurs.
Les bornes d’extraction doivent respecter 0 <= start <= end <= length. Si start et end sont égaux, la liste obtenue est vide. La forme abrégée scores[0:2] n’existe pas : écrivez slice(scores, 0, 2).
unique compare les valeurs exactement telles qu'elles sont stockées, de sorte que 1 kg et 1000 g comptent comme deux valeurs différentes, et deux résultats qui diffèrent dans la dixième décimale ne sont pas fusionnés.
Transformer et filtrer
map évalue une expression pour chaque valeur d’une liste. filter conserve celles qui satisfont une condition. Dans les deux cas, écrivez l’expression, puis un nom représentant chaque valeur, puis la liste :
scores = [72, 85, 91, 64, 88]map(s + 5, s, scores) donne [77, 90, 96, 69, 93]filter(s >= 80, s, scores) donne [85, 91, 88]count(filter(s >= 80, s, scores)) donne 3average(filter(s >= 80, s, scores)) donne 88Lisez filter(s >= 80, s, scores) comme « les valeurs s de scores pour lesquelles s >= 80 ». Ces deux fonctions acceptent les unités et les montants monétaires :
map(p * 1.2, p, [£10, £25, £40]) donne [£12.00, £30.00, £48.00]spend = [£42.50, £18.20, £65.00, £23.30]filter(x > £30, x, spend) donne [£42.50, £65.00]sum(filter(x > £30, x, spend)) donne £107.50Le nom que vous choisissez n'existe qu'à l'intérieur de l'appel. Il ne change pas une valeur du même nom ailleurs dans la note :
x = 10map(x * 2, x, [1, 2, 3]) donne [2, 4, 6]x donne 10La condition de filter doit être une comparaison ou une autre valeur booléenne. Un nombre seul n’est pas interprété comme vrai : filter(x, x, [0, 1, 2]) produit donc une erreur. Appliquer map ou un filtrage à une liste vide donne une liste vide.
Arithmétique sur les listes
Vous pouvez multiplier ou diviser chaque valeur par un seul nombre, et ajouter ou soustraire deux listes de même longueur valeur par valeur :
[30, 36, 22] / 40 * 100 donne [75, 90, 55]2 * [3, 1, 4] donne [6, 2, 8]-[5, -3] donne [-5, 3]mocks = [62, 70, 60]finals = [72, 78, 69]finals - mocks donne [10, 8, 9]average(finals - mocks) donne 9[1 kg, 2 kg] + [500 g, 500 g] donne [1.5 kg, 2.5 kg][72, 85] == [72, 85] donne trueLa première ligne convertit des notes sur 40 en pourcentages. La ligne finals - mocks associe la note de l’examen blanc de chaque élève à sa note finale.
Certaines opérations ne sont pas prises en charge sur les listes :
- Ajouter un seul nombre à une liste, comme dans
scores + 5. Utilisezmap(s + 5, s, scores)à la place. - Additionner des listes de longueurs différentes. Les valeurs ne sont jamais répétées pour égaliser les longueurs.
- Multiplier deux listes simples avec
*. Pour additionner les produits terme à terme, utilisezdot:dot([2, 3, 1], [4, 5, 10])donne33, par exemple deux cafés à 4, trois thés à 5 et un gâteau à 10. Entre des listes de lignes,*effectue une multiplication matricielle ; voir Vecteurs et matrices.
Listes de lignes
Une liste de lignes fonctionne comme un petit tableau. average et sum calculent chaque colonne, tandis que map permet de traiter chaque ligne :
# Each row is one student: [mock, final]results = [[62, 72], [70, 78], [60, 69]]average(results) donne [64, 73]sum(results) donne [192, 219]map(average(r), r, results) donne [67, 74, 64.5]median, min, max et stddev n’acceptent pas les listes de lignes. Utilisez map sur les lignes, comme dans le dernier exemple, ou extrayez une colonne dans une liste distincte.
Les règles détaillées de ces opérations figurent dans la référence des mathématiques avancées.
Combiner les opérations
Voici les pas comptés par une montre pendant une semaine, avec un objectif quotidien :
# Steps, Monday to Sundaysteps = [8200, 10400, 6300, 12000, 9100, 7400, 9600]goal = 9000sum(steps) donne 63,000average(steps) donne 9,000median(steps) donne 9,100Days on target: count(filter(s >= goal, s, steps)) donne 4Spread: max(steps) - min(steps) donne 5,700# Roughly 0.75 m per stepwalked = sum(steps) * 0.75 mwalked in km donne 47.25 kmLa moyenne atteint exactement l’objectif, mais seuls quatre jours l’ont atteint. L’écart entre le meilleur et le moins bon jour est de 5 700 pas. Modifiez goal ou collez les relevés de la semaine suivante : toutes les lignes s’actualisent.