Saltar al contenido
Guía de Varlig
Inicio de Varlig

Listas y estadística

Una lista reúne varios valores bajo un mismo nombre, como los pasos de una semana, las notas de unos exámenes o los tiques de un mes. Una vez que los valores están en una lista, puedes sumarlos, calcular su media, medir su dispersión y quedarte con los que importan.

Esta página explica cómo escribir listas y acceder a sus elementos, las estadísticas descriptivas, cómo sumar las líneas de arriba, cómo marcar líneas con etiquetas para sumarlas estén donde estén, cómo ordenar y extraer partes, cómo transformar una lista con map y filter, y la aritmética con listas completas. Te servirá siempre que tengas una columna de cifras que resumir. Las listas de filas también pueden funcionar como matrices, que tienen su propia página.

Escribir una lista

Escribe los valores entre corchetes, separados por comas:

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

La posición de un valor en la lista es su índice, que se escribe entre corchetes después de la lista. Los índices empiezan en cero, así que notas[0] es la primera nota y notas[4] es la quinta. El último elemento siempre está en length(notas) - 1. Un índice negativo, fraccionario o demasiado grande da un error; los índices no vuelven a empezar desde el final.

Los elementos pueden ser cálculos, cantidades con unidades u otras listas:

calc
[2 * 45, 60 + 15] da [90, 75]
[1.5 kg, 750 g] da [1.5 kg, 750 g]
[[1, 2], [3, 4]][1][0] da 3

Con listas anidadas, el primer índice elige la lista interior y el segundo elige un valor de ella: [1] selecciona [3, 4] y luego [0] selecciona 3.

Los separadores de miles funcionan dentro de una lista, así que puedes pegar las cifras tal como están escritas. Pon un espacio después de cada coma entre valores; una coma seguida de tres dígitos sigue formando parte del número:

calc
sueldos = [32,000 €, 41,500 €, 38,250 €] da [€32,000.00, €41,500.00, €38,250.00]
average(sueldos) da €37,250.00

Ten en cuenta lo siguiente:

  • Sin espacios, cada coma separa, así que [8200,10400] tiene dos valores. Una lista como [100,200,300] podría ser un número o tres, así que Varlig muestra un error que explica las dos opciones.
  • Los resultados muestran separadores de miles y un espacio después de cada coma, así que [8,200, 10,400] es una lista de dos valores.
  • Una lista contiene como máximo 1,024 valores.

Estadísticas descriptivas

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

mean y avg son otros nombres de average, total lo es de sum, stdev de stddev y count de length, así que tus costumbres de las hojas de cálculo te sirven aquí. product multiplica los valores entre sí. Para el valor más frecuente, un percentil o un cuartil, consulta más abajo.

Con una lista con nombre, también puedes escribir la estadística con palabras:

calc
notas = [72, 85, 91, 64, 88]
average of notas da 80
total of notas da 400

sum of, mean of, median of, min of, max of y count of funcionan igual. Después de of, escribe un nombre o los propios valores, separados por comas, con o sin paréntesis. Para valores entre corchetes, usa la forma de función, como en average([72, 85, 91]).

La mayoría de las estadísticas, como sum, product, average, median, min, max, count y stddev, también aceptan valores sueltos en lugar de una lista:

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

Sumar las líneas de arriba

Una línea que solo contiene sum, total, subtotal, grand total, average, max o min calcula esa cifra a partir de los resultados de arriba. Abarca su propia sección, que empieza en el total anterior, en un separador --- o en un encabezado #, así que cada parte de una nota tiene su propia cifra mientras escribes. Funciona como la opción Subtotal del menú contextual de una línea:

calc
# Compra
pan = 1.20 €
leche = 1.45 €
huevos = 2.30 €
total da €4.95
# Hogar
bolsas de basura = 3.50 €
lavavajillas = 1.80 €
total da €5.30

La palabra admite un texto delante, un nombre propio, una conversión o un comentario detrás, así que la línea se lee como el resto de tu nota:

calc
entradas = 64 €
tren = 41.20 €
Total estimado: total da €105.20

est = total guarda la cifra con un nombre, y total // falta reservar añade una nota al lado. total in kg convierte antes de mostrar el resultado, algo útil cuando una sección mezcla gramos y kilogramos. Una palabra de estadística junto a un operador vale lo que mostraría su propia línea, así que 5 € + subtotal suma cinco euros al total acumulado.

calc
# Paquetes
12 kg da 12 kg
4 kg da 4 kg
850 g da 850 g
total in kg da 16.85 kg
max da 12 kg

Si has dado a un valor el nombre sum o total, la línea muestra tu valor. Cuando no hay nada arriba con lo que trabajar, la línea dice Unsupported: no amounts above to add up en lugar de quedarse en blanco o mostrar un cero, lo que suele significar que había un encabezado del que te habías olvidado.

Cada importe se cuenta una sola vez. Cuando una línea posterior de la sección calcula algo a partir de un importe con nombre, el total cuenta esa línea y no las dos, así que una lista de la compra con precios unitarios y cantidades suma lo que vas a pagar de verdad:

calc
camisa = 18.50 €
pantalones = 9 €
9 * camisa da €166.50
10 * pantalones da €90.00
comisión = 40 €
iva = comisión * 21% da €8.40
total da €304.90

camisa y pantalones se cuentan dentro de las dos líneas que los usan, mientras que comisión sigue en el total porque iva solo toma una parte de ella.

Esto sigue una cadena de nombres hasta donde llegue. Cuando una nota reparte un importe en partes y luego vuelve a sumarlas, cuenta la línea que las suma, y también el importe del que salían:

calc
bote = 900 €
primero = 50% of bote da €450.00
segundo = 30% of bote da €270.00
tercero = 20% of bote da €180.00
primero + segundo + tercero da €900.00
total da €900.00

Solo se suman importes del mismo tipo. Los porcentajes, las tarifas y los recuentos sin más se quedan fuera cuando arriba hay dinero o una cantidad, igual que una línea con un error. Los números sin unidad pegados en una columna sí se suman cuando están escritos al céntimo, como los importes; uno con más decimales, como un tipo de cambio o un factor, se queda fuera. El aviso del total nombra todo lo que ha dejado fuera, por ejemplo “Leaves out line 3 (personas = 2)” o “Leaves out line 2 (an error)”, así que ves de un vistazo qué entra en la cifra.

Una lista de dos o más importes escritos sin nombre, justo encima del total y debajo de una línea calculada a partir de nombres, se suma por su cuenta. Así, un presupuesto calculado al principio de una nota no se vuelve a contar en la lista de abajo:

calc
presupuesto = 18,000 €
restante = presupuesto - 6,388.25 € da €11,611.75
- contenedor de obra 250 € da €250.00
- limpieza a fondo 120 € da €120.00
subtotal da €370.00

Para sumar líneas que no están juntas, márcalas con una etiqueta.

Valores más frecuentes

mode da el valor que aparece más veces que ningún otro, y modes da todos los valores empatados como más frecuentes, en una lista:

calc
calificaciones = [3, 4, 4, 5, 5, 5, 6]
mode(calificaciones) da 5
modes([1, 1, 2, 2, 3]) da [1, 2]

mode solo responde cuando un valor es estrictamente el más frecuente. Si no se repite nada, o varios valores empatan, lo dice en lugar de elegir uno:

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

Percentiles y cuartiles

percentile(lista, rango) toma un rango de 0 a 100 y da el valor que hay en ese punto, interpolando entre las dos observaciones más cercanas. quartile(lista, k) hace lo mismo por cuartos, con una k de 0 a 4, así que quartile(lista, 1) es percentile(lista, 25):

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

El percentil 50 es la mediana, y el 0 y el 100 —quartile(lista, 0) y quartile(lista, 4)— son el valor menor y el mayor, igual que min y max. Un rango fuera de su intervalo es un error, en lugar del valor más cercano que encajaría:

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

Dispersión: varianza y desviación típica

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

Ambas son estadísticas muestrales: dividen entre uno menos que el número de valores (n - 1), que es lo habitual cuando tus cifras son una muestra de algo mayor. Necesitan al menos dos valores. Añade to 1 dp después de cualquier estadística para redondearla.

Cuando tu lista es la población completa y no una muestra, usa las formas poblacionales, que dividen entre n y necesitan un solo valor:

calc
# Retrasos de trenes en minutos
retrasos = [2, 4, 4, 4, 5, 5, 7, 9]
sample_variance(retrasos) da 4.5714285714
population_variance(retrasos) da 4
sample_stddev(retrasos) da 2.1380899353
population_stddev(retrasos) da 2
Llamada Divide las diferencias al cuadrado entre Necesita
variance, sample_variance n - 1 Dos valores
population_variance n Un valor
stddev, stdev, sample_stddev n - 1 Dos valores
population_stddev n Un valor

sample_variance y sample_stddev son nombres más largos de variance y stddev, para que puedas dejar claro cuál quieres. Los nombres cortos siempre han sido las formas muestrales, y lo siguen siendo.

Listas con unidades

sum, average, median, mode, modes, percentile, quartile, min, max, stddev y population_stddev conservan las unidades y convierten entre unidades compatibles. Los valores se leen en la unidad del primero, y el resultado vuelve en esa misma unidad:

calc
trayectos = [24 min, 31 min, 27 min, 22 min]
sum(trayectos) da 1 hour 44 min
average(trayectos) da 26 min
median(trayectos) da 25.5 min
percentile(trayectos, 25) da 23.5 min
population_stddev(trayectos) da 3.3911649916 min
sum([1 kg, 500 g]) da 1.5 kg
modes([1 kg, 500 g, 1 kg, 500 g]) da [0.5 kg, 1 kg]

Las varianzas son la excepción: elevan al cuadrado sus observaciones, y ninguna unidad sobrevive a eso, así que solo aceptan números sin unidades.

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

sort también funciona solo con números sin unidades. Una estadística sobre valores con unidades incompatibles, como sum([1 kg, 3 m]), da un error en lugar de omitir valores sin avisar.

Las reglas de exactitud que hay detrás de todo esto están en Qué garantiza el motor.

Listas vacías

Llamada con una lista vacía Resultado
sum([]) 0
product([]) 1
count([]), length([]) 0
average([]), median([]), min([]), max([]) Error
variance([]), stddev([]) Error

Lo más habitual es que una lista vacía salga de un filter que no ha encontrado nada, así que el average de una lista filtrada puede fallar aunque la lista original tenga valores.

Etiquetas

Una etiqueta es una # con una palabra pegada justo detrás, como #comida. Escríbela en cualquier punto de una línea para marcarla. La etiqueta no participa en el cálculo, así que la línea sigue mostrando su propio resultado, y agrupa esa línea con todas las demás que llevan la misma etiqueta. total of #comida suma entonces esas líneas:

calc
12.50 € almuerzo #comida da €12.50
8 € café #comida da €8.00
vuelos = 420 € #viaje da €420.00
total of #comida da €20.50

Eso es lo que te da una etiqueta y un subtotal no: las líneas no tienen que estar juntas. Una semana de gastos, un viaje y una lista de la compra pueden compartir un mismo bloque, cada uno con su cifra al final. Pon el puntero sobre una etiqueta para ver cuánto suma hasta ese momento.

Todas las estadísticas funcionan con una etiqueta. El of es opcional, la etiqueta puede ir antes o después de la palabra, y el resultado admite un texto delante o un nombre propio, como cualquier otra línea:

calc
#comida 12.50 €
#comida 8 €
420 € #viaje
total of #comida da €20.50
average of #comida da €10.25
count of #comida da 2
min of #comida da €8.00
max of #comida da €12.50
#comida total da €20.50
Comida de la semana: sum of #comida da €20.50
comido = avg #comida da €10.25

sum, total, average, avg, mean, count, min y max se leen todas así.

La estadística de una etiqueta ocupa el lugar de un importe, así que un cálculo puede continuar a partir de ella. Así restas una señal de un total acumulado, lo multiplicas o enfrentas dos etiquetas entre sí:

calc
20 € compra #comida da €20.00
30 € cena fuera #comida da €30.00
total of #comida - 10 € da €40.00
2 * total of #comida da €100.00
Equipo de cocina: total of #comida da €50.00

Una línea puede llevar tantas etiquetas como quieras, y cada una la cuenta. Nombra dos etiquetas en una misma expresión y obtienes las líneas que llevan las dos:

calc
50 € cena #viaje #comida da €50.00
30 € taxi #viaje da €30.00
9 € bocadillo #comida da €9.00
total of #viaje da €80.00
total of #comida da €59.00
total of #viaje #comida da €50.00

Qué abarca el total de una etiqueta

Una expresión con etiqueta mira exactamente las mismas líneas que miraría un total normal, y sigue las mismas reglas:

  • Abarca su propia sección, hasta el total anterior, un separador --- o un encabezado #.
  • Solo suma importes del mismo tipo. Los porcentajes, las tarifas, los recuentos sin más y las líneas con errores se quedan fuera, y el aviso los nombra, por ejemplo “Leaves out line 2 (personas = 2)”.
  • Cada importe se cuenta una sola vez, así que un precio etiquetado que una línea etiquetada posterior multiplica se cuenta en esa línea y no en las dos.

Por eso basta con un encabezado para separar la #comida de una semana de la de la siguiente:

calc
# Semana 1
20 € almuerzo #comida da €20.00
total of #comida da €20.00
# Semana 2
30 € almuerzo #comida da €30.00
total of #comida da €30.00

Cuando no hay nada que sumar, la línea lo dice en lugar de quedarse en blanco o mostrar un cero, lo que suele significar que hay una errata en la etiqueta o un encabezado del que te habías olvidado:

calc
12.50 € almuerzo #comida da €12.50
total of #bebidas da Unsupported: no lines tagged #bebidas above
llamar al fontanero #tareas
total of #tareas da Unsupported: no amounts tagged #tareas above

Cómo se escriben los nombres de las etiquetas

El nombre de una etiqueta admite letras, cifras, _, - y /, así que #t1-2026 y #viaje/lisboa son cada uno un solo nombre. Las mayúsculas no cambian nada:

calc
20 € vuelo #viaje/lisboa da €20.00
35 € hotel #Viaje/Lisboa da €35.00
total of #viaje/lisboa da €55.00

Una # que no va pegada a una palabra conserva su significado de siempre, así que nada de lo que ya escribes cambia:

Lo que escribes Qué es
# Compra semanal Un comentario, por el espacio después de la almohadilla
5 + 5 # comentario Lo mismo: todo lo que va después de la almohadilla se ignora
C#4 in Hz Un sostenido musical, porque la almohadilla va pegada a la nota musical
#1, Factura #123 Un número, no una etiqueta: un nombre de etiqueta no empieza por una cifra
#ff0000, #fff Un código de color
varlig.app/docs#tags Una dirección web con un fragmento

El nombre de una etiqueta tiene que empezar por una letra, y tres, cuatro, seis u ocho dígitos hexadecimales después de la almohadilla se leen como un color, así que #cafe es un color y #cafes es una etiqueta.

Etiquetas en una nota y etiquetas en un bloque

Las etiquetas que organizan tus notas en la barra lateral se explican en Etiquetas, enlaces y retroenlaces. Esas se detienen en el borde de un bloque de cálculo: una #comida escrita dentro de un bloque marca esa línea para su total y nunca aparece en la barra lateral, y una #comida en la nota que rodea al bloque clasifica la nota sin tocar tus cuentas. Escribe la etiqueta en los dos sitios cuando quieras las dos cosas, y ten en cuenta que se diferencian en un detalle: la etiqueta de una nota admite espacios si la cierras con una segunda #, mientras que la de un bloque de cálculo siempre termina en el primer espacio.

Referencia de listas

Llamada Qué hace
range(inicio,fin) Números enteros de inicio a fin, ambos incluidos
range(inicio,fin,paso) Cuenta de paso en paso, que puede ser negativo o fraccionario, pero no cero
length(lista), count(lista) Número de valores
sort(lista) De menor a mayor; solo números sin unidades
reverse(lista) Los mismos valores en orden inverso; cualquier valor
unique(lista) Conserva la primera aparición de cada valor
slice(lista,inicio,fin) Los valores desde el índice inicio hasta el índice fin, sin incluirlo
map(expresión,variable,lista) Calcula la expresión una vez para cada valor
filter(condición,variable,lista) Conserva los valores para los que la condición es true
calc
range(1, 5) da [1, 2, 3, 4, 5]
range(0, 100, 25) da [0, 25, 50, 75, 100]
range(10, 0, -2) da [10, 8, 6, 4, 2, 0]
notas = [72, 85, 91, 64, 88]
sort(notas) da [64, 72, 85, 88, 91]
reverse(sort(notas)) da [91, 88, 85, 72, 64]
slice(sort(notas), 0, 3) da [64, 72, 85]
unique([4, 2, 4, 6, 2]) da [4, 2, 6]

reverse(sort(…)) pone primero el mayor, y slice(sort(…), 0, 3) elige los tres más bajos.

Los límites de slice deben cumplir 0 <= inicio <= fin <= longitud. Si inicio y fin son iguales, obtienes una lista vacía. No existe la forma abreviada notas[0:2]; escribe slice(notas, 0, 2).

unique compara los valores exactamente como están guardados, así que 1 kg y 1000 g cuentan como dos valores distintos, y dos resultados que se diferencian en el décimo decimal no se unen.

Map y filter

map calcula una expresión para cada valor de una lista. filter conserva los valores que cumplen una condición. En ambos casos va primero la expresión, luego un nombre que representa cada valor y después la lista:

calc
notas = [72, 85, 91, 64, 88]
map(s + 5, s, notas) da [77, 90, 96, 69, 93]
filter(s >= 80, s, notas) da [85, 91, 88]
count(filter(s >= 80, s, notas)) da 3
average(filter(s >= 80, s, notas)) da 88

Lee filter(s >= 80, s, notas) como “los valores s de notas para los que s >= 80”. Ambos funcionan con unidades y dinero:

calc
map(p * 1.2, p, [10 €, 25 €, 40 €]) da [€12.00, €30.00, €48.00]
gastos = [42.50 €, 18.20 €, 65.00 €, 23.30 €]
filter(x > 30 €, x, gastos) da [€42.50, €65.00]
sum(filter(x > 30 €, x, gastos)) da €107.50

El nombre que elijas solo existe dentro de la llamada. No cambia un valor con el mismo nombre en otra parte de la nota:

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

La condición de filter debe ser una comparación u otro valor verdadero o falso. Un número sin más no se trata como verdadero, así que filter(x, x, [0, 1, 2]) da un error. Aplicar map o filter a una lista vacía da una lista vacía.

Aritmética con listas

Puedes multiplicar o dividir todos los valores por un mismo número, y sumar o restar dos listas de la misma longitud valor a valor:

calc
[30, 36, 22] / 40 * 100 da [75, 90, 55]
2 * [3, 1, 4] da [6, 2, 8]
-[5, -3] da [-5, 3]
simulacros = [62, 70, 60]
finales = [72, 78, 69]
finales - simulacros da [10, 8, 9]
average(finales - simulacros) da 9
[1 kg, 2 kg] + [500 g, 500 g] da [1.5 kg, 2.5 kg]
[72, 85] == [72, 85] da true

La primera línea convierte notas sobre 40 en porcentajes. La línea finales - simulacros empareja la nota del simulacro de cada alumno con su nota final.

Algunas operaciones no se pueden hacer con listas:

  • Sumar un número suelto a una lista, como en notas + 5. Usa map(s + 5, s, notas) en su lugar.
  • Sumar listas de distinta longitud. Los valores nunca se repiten para igualar las longitudes.
  • Multiplicar dos listas planas con *. Para la suma de los productos por pares, usa dot: dot([2, 3, 1], [4, 5, 10]) es 33, por ejemplo dos cafés a 4, tres tés a 5 y un pastel a 10. Entre listas de filas, * es la multiplicación de matrices, que se explica en Vectores y matrices.

Listas de filas

Una lista de filas funciona como una pequeña tabla. average y sum trabajan por columnas, y map puede trabajar fila a fila:

calc
# Cada fila es un alumno: [simulacro, final]
resultados = [[62, 72], [70, 78], [60, 69]]
average(resultados) da [64, 73]
sum(resultados) da [192, 219]
map(average(r), r, resultados) da [67, 74, 64.5]

median, min, max y stddev no aceptan listas de filas. Usa map sobre las filas, como en la última línea, o saca una columna a su propia lista.

Las reglas exactas de todas estas operaciones están en Matemáticas avanzadas: posibilidades y límites.

Todo junto

Estos son los pasos de una semana registrados por un reloj, con un objetivo diario:

calc
# Pasos, de lunes a domingo
pasos = [8200, 10400, 6300, 12000, 9100, 7400, 9600]
objetivo = 9000
sum(pasos) da 63,000
average(pasos) da 9,000
median(pasos) da 9,100
Días con el objetivo cumplido: count(filter(s >= objetivo, s, pasos)) da 4
Diferencia: max(pasos) - min(pasos) da 5,700
# Unos 0.75 m por paso
recorrido = sum(pasos) * 0.75 m
recorrido in km da 47.25 km

La media coincide exactamente con el objetivo, pero solo cuatro días lo alcanzaron, y hay 5,700 pasos de diferencia entre el mejor y el peor día. Cambia objetivo o pega los pasos de la semana siguiente y todas las líneas se actualizan.