Passer au contenu
Guide Varlig
Accueil Varlig

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 :

calc
scores = [72, 85, 91, 64, 88] donne [72, 85, 91, 64, 88]
scores[0] donne 72
scores[4] donne 88
length(scores) donne 5

La 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 :

calc
[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 3

Dans 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.

calc
salaries = [£32,000, £41,500, £38,250] donne [£32,000.00, £41,500.00, £38,250.00]
average(salaries) donne £37,250.00

Quelques 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

calc
scores = [72, 85, 91, 64, 88]
sum(scores) donne 400
average(scores) donne 80
median(scores) donne 85
min(scores) donne 64
max(scores) donne 91
count(scores) donne 5

mean 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 :

calc
scores = [72, 85, 91, 64, 88]
average of scores donne 80
total of scores donne 400

sum 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 :

calc
max(72, 85, 91) donne 91
sum(1, 2, 3, 4) donne 10
average of 70, 85, 91 donne 82
mean of (1,2,3) donne 2
average(1,200, 1,800) donne 1,500

Additionner 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 :

calc
# Groceries
bread = £1.20
milk = £1.45
eggs = £2.30
total donne £4.95
# Household
bin bags = £3.50
washing up liquid = £1.80
total donne £5.30

Vous 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 :

calc
tickets = £64
train = £41.20
Estimated total: total donne £105.20

est = 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.

calc
# Parcels
12 kg donne 12 kg
4 kg donne 4 kg
850 g donne 850 g
total in kg donne 16.85 kg
max donne 12 kg

Si 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 :

calc
shirt = £18.50
shorts = £9
9 * shirt donne £166.50
10 * shorts donne £90.00
fee = £40
vat = fee * 20% donne £8.00
total donne £304.50

shirt 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 :

calc
pot = £900
1st = 50% of pot donne £450.00
2nd = 30% of pot donne £270.00
3rd = 20% of pot donne £180.00
1st + 2nd + 3rd donne £900.00
total donne £900.00

Seuls 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 :

calc
budget = £18,000
remaining = budget - £6,388.25 donne £11,611.75
- skip hire £250 donne £250.00
- deep clean £120 donne £120.00
subtotal donne £370.00

Pour 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 :

calc
marks = [3, 4, 4, 5, 5, 5, 6]
mode(marks) donne 5
modes([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 :

calc
mode([1, 2, 3]) donne Unsupported: No value repeats, so this list has no mode; use median or average instead

Centiles 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).

calc
scores = [72, 85, 91, 64, 88]
percentile(scores, 50) donne 85
percentile(scores, 25) donne 72
quartile(scores, 3) donne 88
quartile(scores, 4) donne 91
percentile([1, 2, 3, 4], 25) donne 1.75
quartile([1, 2, 3, 4], 3) donne 3.25

Le 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 :

calc
percentile([1, 2, 3, 4], 101) donne Unsupported: A percentile is between 0 and 100
quartile([1, 2, 3, 4], 5) donne Unsupported: A quartile is 0, 1, 2, 3 or 4

Dispersion : variance et écart-type

calc
scores = [72, 85, 91, 64, 88]
variance(scores) donne 132.5
stddev(scores) to 1 dp donne 11.5

Ces 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.

calc
# Train delays in minutes
delays = [2, 4, 4, 4, 5, 5, 7, 9]
sample_variance(delays) donne 4.5714285714
population_variance(delays) donne 4
sample_stddev(delays) donne 2.1380899353
population_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 :

calc
commutes = [24 min, 31 min, 27 min, 22 min]
sum(commutes) donne 1 hour 44 min
average(commutes) donne 26 min
median(commutes) donne 25.5 min
percentile(commutes, 25) donne 23.5 min
population_stddev(commutes) donne 3.3911649916 min
sum([1 kg, 500 g]) donne 1.5 kg
modes([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é.

calc
sample_variance([1 kg, 2 kg]) donne Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unit

sort 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 :

calc
£12.50 lunch #food donne £12.50
£8 coffee #food donne £8.00
flights = £420 #trip donne £420.00
total of #food donne £20.50

Les 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 :

calc
#food £12.50
#food £8
£420 #trip
total of #food donne £20.50
average of #food donne £10.25
count of #food donne 2
min of #food donne £8.00
max of #food donne £12.50
#food total donne £20.50
Food this week: sum of #food donne £20.50
eaten = avg #food donne £10.25

sum, 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 :

calc
£20 shop #food donne £20.00
£30 meal out #food donne £30.00
total of #food - £10 donne £40.00
2 * total of #food donne £100.00
Cooking kit: total of #food donne £50.00

Une 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 :

calc
£50 dinner #trip #food donne £50.00
£30 taxi #trip donne £30.00
£9 sandwich #food donne £9.00
total of #trip donne £80.00
total of #food donne £59.00
total of #trip #food donne £50.00

Valeurs 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 :

calc
# Week 1
£20 lunch #food donne £20.00
total of #food donne £20.00
# Week 2
£30 lunch #food donne £30.00
total of #food donne £30.00

En 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 :

calc
£12.50 lunch #food donne £12.50
total of #drinks donne Unsupported: no lines tagged #drinks above
ring the plumber #jobs
total 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 :

calc
£20 flight #trip/lisbon donne £20.00
£35 hotel #Trip/Lisbon donne £35.00
total of #trip/lisbon donne £55.00

Un # 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
calc
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 :

calc
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 3
average(filter(s >= 80, s, scores)) donne 88

Lisez 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 :

calc
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.50

Le 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 :

calc
x = 10
map(x * 2, x, [1, 2, 3]) donne [2, 4, 6]
x donne 10

La 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 :

calc
[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 true

La 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. Utilisez map(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, utilisez dot : dot([2, 3, 1], [4, 5, 10]) donne 33, 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 :

calc
# 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 :

calc
# Steps, Monday to Sunday
steps = [8200, 10400, 6300, 12000, 9100, 7400, 9600]
goal = 9000
sum(steps) donne 63,000
average(steps) donne 9,000
median(steps) donne 9,100
Days on target: count(filter(s >= goal, s, steps)) donne 4
Spread: max(steps) - min(steps) donne 5,700
# Roughly 0.75 m per step
walked = sum(steps) * 0.75 m
walked in km donne 47.25 km

La 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.