Listas e estatística
Uma lista reúne vários valores sob um único nome: passos dados em uma semana, notas de provas ou recibos de um mês. Com os valores em uma lista, você pode somá-los, calcular a média, medir sua dispersão e selecionar os que interessam.
Esta página abrange listas de escrita e indexação, estatísticas resumidas, adição das linhas acima, rotulagem de linhas com tags para que você possa totalizá-las onde quer que estejam, classificação e fatiamento, transformação de uma lista com map e filter e aritmética em listas inteiras. Use esta página sempre que tiver uma coluna de figuras para resumir. Listas de linhas também podem atuar como matrizes, que têm sua própria página.
Escrevendo uma lista
Coloque os valores entre colchetes, separados por vírgulas:
scores = [72, 85, 91, 64, 88] resulta em [72, 85, 91, 64, 88]scores[0] resulta em 72scores[4] resulta em 88length(scores) resulta em 5A posição de um valor na lista é seu índice, escrito entre colchetes depois da lista. Os índices começam em zero: scores[0] é a primeira nota, e scores[4], a quinta. O último elemento fica sempre em length(scores) - 1. Índices negativos, fracionários ou acima do limite produzem erro; eles não contam a partir do fim nem reiniciam no começo.
Elementos podem ser cálculos, quantidades com unidades ou outras listas:
[2 * 45, 60 + 15] resulta em [90, 75][1.5 kg, 750 g] resulta em [1.5 kg, 750 g][[1, 2], [3, 4]][1][0] resulta em 3Com listas aninhadas, o primeiro índice escolhe a lista interna e o segundo escolhe um valor a partir dela: [1] seleciona [3, 4], então [0] seleciona 3.
Separadores de milhar funcionam dentro de listas, permitindo colar os números como estão escritos. Coloque um espaço após cada vírgula que separa valores. Uma vírgula seguida de três dígitos continua fazendo parte do número:
salaries = [£32,000, £41,500, £38,250] resulta em [£32,000.00, £41,500.00, £38,250.00]average(salaries) resulta em £37,250.00Algumas coisas para observar:
- Sem espaços, cada vírgula separa valores; por isso,
[8200,10400]tem dois elementos. Já[100,200,300]pode representar um número ou três. Nesse caso, Varlig mostra um erro explicando as duas interpretações. - As respostas usam separadores de milhar e um espaço após cada vírgula entre elementos. Assim,
[8,200, 10,400]é uma lista de dois valores. - Uma lista contém no máximo 1.024 valores.
Estatísticas resumidas
scores = [72, 85, 91, 64, 88]sum(scores) resulta em 400average(scores) resulta em 80median(scores) resulta em 85min(scores) resulta em 64max(scores) resulta em 91count(scores) resulta em 5mean e avg são outros nomes para average, total para sum, stdev para stddev e count para length, então os hábitos da planilha são transferidos. o product multiplica os valores juntos. Para o valor mais comum, um percentil ou um quartil, veja abaixo.
Com uma lista nomeada, você também pode escrever a estatística em palavras:
scores = [72, 85, 91, 64, 88]average of scores resulta em 80total of scores resulta em 400sum of, mean of, median of, min of, max of e count of funcionam da mesma forma. Depois de of, escreva um nome ou os próprios valores separados por vírgulas, com ou sem parênteses. Para valores entre colchetes, use a forma de função, como em average([72, 85, 91]).
A maioria das estatísticas, incluindo sum, product, average, median, min, max, count e stddev, também aceitam valores separados em vez de uma lista:
max(72, 85, 91) resulta em 91sum(1, 2, 3, 4) resulta em 10average of 70, 85, 91 resulta em 82mean of (1,2,3) resulta em 2average(1,200, 1,800) resulta em 1,500Somar as linhas acima
Uma linha contendo apenas sum, total, subtotal, grand total, average, max ou min calcula a estatística correspondente das respostas acima. Ela considera sua própria seção, iniciada no total anterior, em um separador --- ou em um título #. Assim, cada parte da nota recebe seu resultado enquanto você escreve. O comportamento é o mesmo da opção Subtotal no menu de contexto da linha:
# Groceriesbread = £1.20milk = £1.45eggs = £2.30total resulta em £4.95# Householdbin bags = £3.50washing up liquid = £1.80total resulta em £5.30A palavra pode ter um rótulo, tomar um nome próprio, converter a resposta ou ter um comentário depois dela, então a linha parece o resto da sua nota:
tickets = £64train = £41.20Estimated total: total resulta em £105.20est = total armazena o resultado em um nome, e total // still to book acrescenta um comentário ao lado. total in kg converte antes de exibir, o que é útil em uma seção com gramas e quilogramas. Uma palavra de estatística junto de um operador representa o resultado que teria em sua própria linha: £5 + subtotal acrescenta cinco libras ao subtotal.
# Parcels12 kg resulta em 12 kg4 kg resulta em 4 kg850 g resulta em 850 gtotal in kg resulta em 16.85 kgmax resulta em 12 kgSe você deu a um valor o nome sum ou total, a linha mostra seu valor em vez disso. Quando não há nada acima para trabalhar, a linha diz Unsupported: no amounts above to add up vez de mostrar um espaço em branco ou um zero, o que geralmente significa que um título que você esqueceu que estava lá.
Cada valor é contado uma vez. Quando uma linha posterior na seção trabalha algo a partir de uma quantidade nomeada, o total conta essa linha em vez de ambas, portanto, uma lista de compras de preços unitários e quantidades soma o que você realmente pagará:
shirt = £18.50shorts = £99 * shirt resulta em £166.5010 * shorts resulta em £90.00fee = £40vat = fee * 20% resulta em £8.00total resulta em £304.50shirt e shorts são contados dentro das duas linhas que os usam, enquanto fee permanece no total porque vat leva apenas uma parte dele.
Essa regra acompanha toda a cadeia de nomes. Quando a nota divide um valor em partes e depois soma essas partes, entram no total tanto a linha que as soma quanto o valor original do qual elas foram calculadas:
pot = £9001st = 50% of pot resulta em £450.002nd = 30% of pot resulta em £270.003rd = 20% of pot resulta em £180.001st + 2nd + 3rd resulta em £900.00total resulta em £900.00Somente valores compatíveis são somados. Se houver valores monetários ou quantidades com unidades acima, porcentagens, taxas e contagens simples ficam de fora, assim como linhas com erro. Números sem unidades colados em uma coluna entram na soma quando escritos com precisão de centavos, como os demais valores monetários. Valores com mais casas decimais, como taxas de câmbio ou fatores, são excluídos. A dica do total informa tudo o que ficou de fora, por exemplo: "Exclui a linha 3 (people = 2)" ou "Exclui a linha 2 (erro)", permitindo conferir o que compõe o resultado.
Uma lista de dois ou mais valores escritos sem nomes, diretamente acima do total e abaixo de uma linha trabalhada a partir de nomes, é adicionada por conta própria. Dessa forma, um orçamento trabalhado no topo de uma nota não é contado novamente na lista abaixo:
budget = £18,000remaining = budget - £6,388.25 resulta em £11,611.75- skip hire £250 resulta em £250.00- deep clean £120 resulta em £120.00subtotal resulta em £370.00Para totalizar linhas que não estão próximas uma da outra, rotule-as com uma tag.
Valores mais comuns
mode retorna o valor mais frequente; modes retorna uma lista com todos os valores empatados na maior frequência:
marks = [3, 4, 4, 5, 5, 5, 6]mode(marks) resulta em 5modes([1, 1, 2, 2, 3]) resulta em [1, 2]mode responde apenas quando um valor é estritamente o mais comum. Se nada se repetir, ou vários valores empatados, ele diz isso em vez de escolher um:
mode([1, 2, 3]) resulta em Unsupported: No value repeats, so this list has no mode; use median or average insteadPercentis e quartis
percentile(list, rank) recebe uma posição de 0 a 100 e retorna o valor correspondente, interpolando entre as duas observações mais próximas. quartile(list, k) faz o mesmo em quartos, com k de 0 a 4: quartile(list, 1) equivale a percentile(list, 25):
scores = [72, 85, 91, 64, 88]percentile(scores, 50) resulta em 85percentile(scores, 25) resulta em 72quartile(scores, 3) resulta em 88quartile(scores, 4) resulta em 91percentile([1, 2, 3, 4], 25) resulta em 1.75quartile([1, 2, 3, 4], 3) resulta em 3.25O percentil 50 é a mediana, e o 0o e o 100o — quartile(list, 0) e quartile(list, 4) — são os menores e maiores valores, o mesmo que min e max. Uma classificação fora de seu intervalo é um erro, em vez do valor mais próximo que se encaixaria:
percentile([1, 2, 3, 4], 101) resulta em Unsupported: A percentile is between 0 and 100quartile([1, 2, 3, 4], 5) resulta em Unsupported: A quartile is 0, 1, 2, 3 or 4Dispersão: variância e desvio padrão
scores = [72, 85, 91, 64, 88]variance(scores) resulta em 132.5stddev(scores) to 1 dp resulta em 11.5Ambas são estatísticas amostrais: dividem pelo número de valores menos um (n - 1), a escolha usual quando os dados são uma amostra de um conjunto maior. Elas exigem pelo menos dois valores. Acrescente to 1 dp depois de qualquer estatística para arredondá-la.
Quando a lista representa toda a população, não uma amostra, use as versões populacionais, que dividem por n e exigem apenas um valor:
# Train delays in minutesdelays = [2, 4, 4, 4, 5, 5, 7, 9]sample_variance(delays) resulta em 4.5714285714population_variance(delays) resulta em 4sample_stddev(delays) resulta em 2.1380899353population_stddev(delays) resulta em 2| Chamada | Divide as diferenças ao quadrado por | Requer |
|---|---|---|
variance, sample_variance |
n - 1 |
Dois valores |
population_variance |
n |
Um valor |
stddev, stdev, sample_stddev |
n - 1 |
Dois valores |
population_stddev |
n |
Um valor |
sample_variance e sample_stddev são nomes mais longos para variance e stddev, para que você possa soletrar qual você quer dizer. Os nomes curtos sempre foram as formas de amostra e ainda são.
Listas com unidades
sum, average, median, mode, modes, percentile, quartile, min, max, stddev e population_stddev mantêm unidades e convertem entre as compatíveis. Os valores são lidos na unidade do primeiro, e a resposta volta nela:
commutes = [24 min, 31 min, 27 min, 22 min]sum(commutes) resulta em 1 hour 44 minaverage(commutes) resulta em 26 minmedian(commutes) resulta em 25.5 minpercentile(commutes, 25) resulta em 23.5 minpopulation_stddev(commutes) resulta em 3.3911649916 minsum([1 kg, 500 g]) resulta em 1.5 kgmodes([1 kg, 500 g, 1 kg, 500 g]) resulta em [0.5 kg, 1 kg]As variâncias são a exceção: elevam as observações ao quadrado, e Varlig não preserva unidades nessa operação. Por isso, essas funções aceitam apenas números sem unidades.
sample_variance([1 kg, 2 kg]) resulta em Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unitsort também só funciona em números simples. Uma estatística sobre valores com unidades incompatíveis, como sum([1 kg, 3 m]), dá um erro em vez de pular valores silenciosamente.
As regras de exatidão por trás de tudo isso estão em O que o motor garante.
Listas vazias
| Chamada com uma lista vazia | Resultado |
|---|---|
sum([]) |
0 |
product([]) |
1 |
count([]), length([]) |
0 |
average([]), median([]), min([]), max([]) |
Erro |
variance([]), stddev([]) |
Erro |
Uma lista vazia geralmente aparece como resultado de um filter que não corresponde a nada, portanto, uma average de uma lista filtrada pode falhar mesmo quando a lista original tem valores.
Tags
Uma tag é um # com uma palavra unida diretamente a ela, como #food. Escreva um em qualquer lugar de uma linha para rotular essa linha. A tag não participa da soma, então a linha ainda mostra sua própria resposta, e agrupa essa linha com todas as outras linhas que carregam a mesma tag. total of #food então adiciona essas linhas:
£12.50 lunch #food resulta em £12.50£8 coffee #food resulta em £8.00flights = £420 #trip resulta em £420.00total of #food resulta em £20.50Isso é o que uma tag lhe dá que um subtotal não pode: as linhas não precisam ficar uma ao lado da outra. Uma semana de gastos, uma viagem e uma lista de compras podem compartilhar um bloco, cada um com sua própria figura na parte inferior. Mantenha o ponteiro sobre uma tag para ver o que ela se soma até agora.
Toda estatística funciona em uma tag. of é opcional, a tag pode vir antes ou depois da palavra, e a resposta leva um rótulo ou um nome próprio, como qualquer outra linha:
#food £12.50#food £8£420 #triptotal of #food resulta em £20.50average of #food resulta em £10.25count of #food resulta em 2min of #food resulta em £8.00max of #food resulta em £12.50#food total resulta em £20.50Food this week: sum of #food resulta em £20.50eaten = avg #food resulta em £10.25sum, total, average, avg, mean, count, min e max, todos lidos desta forma.
Uma estatística por tag pode aparecer no lugar de um valor, permitindo continuar o cálculo a partir dela. Assim, você pode subtrair uma entrada de um total acumulado, multiplicar um total por um fator ou comparar os totais de duas tags:
£20 shop #food resulta em £20.00£30 meal out #food resulta em £30.00total of #food - £10 resulta em £40.002 * total of #food resulta em £100.00Cooking kit: total of #food resulta em £50.00Uma linha pode carregar quantas tags você quiser, e cada uma conta. Nomeie duas tags em uma frase e você obterá as linhas que carregam ambas:
£50 dinner #trip #food resulta em £50.00£30 taxi #trip resulta em £30.00£9 sandwich #food resulta em £9.00total of #trip resulta em £80.00total of #food resulta em £59.00total of #trip #food resulta em £50.00O que o total de uma tag inclui
Uma frase de tag analisa exatamente as mesmas linhas que um total simples e segue as mesmas regras:
- Abrange sua própria seção, de volta ao total anterior, um divisor
---ou um título#. - São somados apenas valores compatíveis. Porcentagens, taxas, contagens simples e linhas com erro ficam de fora. A dica informa quais foram excluídos, como em "Exclui a linha 2 (people = 2)".
- Cada quantidade é contada uma vez, portanto, um preço marcado que uma linha marcada posterior multiplica é contado nessa linha e não em ambas.
Portanto, um título é tudo o que é necessário para manter o #food de uma semana separado da próxima:
# Week 1£20 lunch #food resulta em £20.00total of #food resulta em £20.00# Week 2£30 lunch #food resulta em £30.00total of #food resulta em £30.00Quando não há nada para somar, a linha diz isso em vez de mostrar um espaço em branco ou um zero, o que geralmente significa um erro de digitação na tag ou um título que você esqueceu que estava lá:
£12.50 lunch #food resulta em £12.50total of #drinks resulta em Unsupported: no lines tagged #drinks abovering the plumber #jobstotal of #jobs resulta em Unsupported: no amounts tagged #jobs aboveComo escrever nomes de tags
Um nome de tag pode conter letras, dígitos, _, - e /, então #q1-2026 e #trip/lisbon são um nome cada. As maiúsculas não fazem diferença:
£20 flight #trip/lisbon resulta em £20.00£35 hotel #Trip/Lisbon resulta em £35.00total of #trip/lisbon resulta em £55.00Um # que não está unido a uma palavra mantém seu significado antigo, então nada que você já escreve muda:
| Você escreve | O que é |
|---|---|
# Weekly shop |
Um comentário, por causa do espaço após o hash |
5 + 5 # comment |
O mesmo: tudo depois do hash é ignorado |
C#4 in Hz |
Um sustenido musical, pois o sinal de cerquilha está junto da nota |
#1, Invoice #123 |
Um número, não uma tag: o nome de uma tag não pode começar com um dígito |
#ff0000, #fff |
Um código de cores |
varlig.app/docs#tags |
Um endereço da web com um fragmento |
O nome de uma tag precisa começar com uma letra. Três, quatro, seis ou oito dígitos hexadecimais depois de # são interpretados como uma cor: por isso, #fee é uma cor, enquanto #fees é uma tag.
Tags em uma nota e tags em um bloco
As tags que organizam notas na barra lateral são explicadas em Tags, links e backlinks. Elas não entram nos blocos de cálculo: #food dentro de um bloco identifica a linha para os totais e nunca aparece na barra lateral; #food no texto ao redor do bloco organiza a nota sem afetar os cálculos. Escreva a tag nos dois lugares se quiser ambos os efeitos. Há uma diferença de sintaxe: uma tag no texto da nota pode conter espaços se terminar com outro #; dentro de um bloco de cálculo, a tag sempre termina no primeiro espaço.
Referência da lista
| Chamada | O que faz |
|---|---|
range(start,end) |
Números inteiros de start a end, incluindo ambas as extremidades |
range(start,end,step) |
Contagem por step, que pode ser negativa ou fracionária, mas não zero |
length(list), count(list) |
Número de valores |
sort(list) |
Menor para maior; apenas números simples |
reverse(list) |
Os mesmos valores em ordem inversa; quaisquer valores |
unique(list) |
Mantenha a primeira ocorrência de cada valor |
slice(list,start,end) |
Valores do índice start até, mas não incluindo, o índice end |
map(expression,variable,list) |
Avalia a expressão uma vez para cada valor |
filter(condition,variable,list) |
Mantenha os valores para os quais a condição é true |
range(1, 5) resulta em [1, 2, 3, 4, 5]range(0, 100, 25) resulta em [0, 25, 50, 75, 100]range(10, 0, -2) resulta em [10, 8, 6, 4, 2, 0]scores = [72, 85, 91, 64, 88]sort(scores) resulta em [64, 72, 85, 88, 91]reverse(sort(scores)) resulta em [91, 88, 85, 72, 64]slice(sort(scores), 0, 3) resulta em [64, 72, 85]unique([4, 2, 4, 6, 2]) resulta em [4, 2, 6]reverse(sort(…)) dá o maior primeiro, e slice(sort(…), 0, 3) escolhe os três mais baixos.
Os limites de fatia devem satisfazer 0 <= start <= end <= length. start e end iguais dão uma lista vazia. Não há scores[0:2] abreviação; escreva slice(scores, 0, 2)
unique compara valores exatamente como são armazenados, então 1 kg e 1000 g contam como dois valores diferentes, e dois resultados que diferem na décima casa decimal não são mesclados.
Mapeamento e filtragem
map trabalha uma expressão para cada valor em uma lista. filter mantém os valores que passam em um teste. Em ambos, a expressão vem primeiro, depois um nome para cada valor, depois a lista:
scores = [72, 85, 91, 64, 88]map(s + 5, s, scores) resulta em [77, 90, 96, 69, 93]filter(s >= 80, s, scores) resulta em [85, 91, 88]count(filter(s >= 80, s, scores)) resulta em 3average(filter(s >= 80, s, scores)) resulta em 88Leia filter(s >= 80, s, scores) como "os valores s em scores onde s >= 80". Ambos trabalham com unidades e dinheiro:
map(p * 1.2, p, [£10, £25, £40]) resulta em [£12.00, £30.00, £48.00]spend = [£42.50, £18.20, £65.00, £23.30]filter(x > £30, x, spend) resulta em [£42.50, £65.00]sum(filter(x > £30, x, spend)) resulta em £107.50O nome que você escolher só existe dentro da chamada. Não altera um valor com o mesmo nome em outro lugar na nota:
x = 10map(x * 2, x, [1, 2, 3]) resulta em [2, 4, 6]x resulta em 10A condição em filter deve ser uma comparação ou outro valor verdadeiro/falso. Um número simples não é tratado como verdadeiro, então filter(x, x, [0, 1, 2]) é um erro. Mapear ou filtrar uma lista vazia dá uma lista vazia.
Aritmética com listas
Você pode multiplicar ou dividir cada valor por um único número e adicionar ou subtrair duas listas do mesmo comprimento valor por valor:
[30, 36, 22] / 40 * 100 resulta em [75, 90, 55]2 * [3, 1, 4] resulta em [6, 2, 8]-[5, -3] resulta em [-5, 3]mocks = [62, 70, 60]finals = [72, 78, 69]finals - mocks resulta em [10, 8, 9]average(finals - mocks) resulta em 9[1 kg, 2 kg] + [500 g, 500 g] resulta em [1.5 kg, 2.5 kg][72, 85] == [72, 85] resulta em trueA primeira linha converte notas de uma prova valendo 40 pontos em porcentagens. A linha finals - mocks compara a nota final de cada aluno com a nota do respectivo simulado.
Algumas operações não são suportadas em listas:
- Adicionando um único número a uma lista, como em
scores + 5. Usemap(s + 5, s, scores)em vez disso. - Adicionando listas de diferentes comprimentos. Os valores nunca são repetidos para fazer com que os comprimentos combinem.
- Multiplicando duas listas simples com
*. Para a soma de produtos em pares, usedot:dot([2, 3, 1], [4, 5, 10])é33, por exemplo, dois cafés em 4, três chás em 5 e um bolo em 10. Entre listas de linhas,*é a multiplicação matricial, coberta em Vetores e matrizes.
Listas de linhas
Uma lista de linhas funciona como uma pequena tabela. average e sum funcionam nas colunas, e map pode funcionar nas linhas:
# Each row is one student: [mock, final]results = [[62, 72], [70, 78], [60, 69]]average(results) resulta em [64, 73]sum(results) resulta em [192, 219]map(average(r), r, results) resulta em [67, 74, 64.5]median, min, max e stddev não aceitam listas de linhas. Use map sobre as linhas, como na última linha, ou puxe uma coluna para sua própria lista.
As regras exatas para todas essas operações estão na referência matemática avançada.
Combinando os recursos
Aqui está uma semana de contagens de passos de um relógio, com uma meta diária:
# Steps, Monday to Sundaysteps = [8200, 10400, 6300, 12000, 9100, 7400, 9600]goal = 9000sum(steps) resulta em 63,000average(steps) resulta em 9,000median(steps) resulta em 9,100Days on target: count(filter(s >= goal, s, steps)) resulta em 4Spread: max(steps) - min(steps) resulta em 5,700# Roughly 0.75 m per stepwalked = sum(steps) * 0.75 mwalked in km resulta em 47.25 kmA média coincide exatamente com a meta, mas apenas quatro dias a atingiram. A diferença entre o melhor e o pior dia é de 5.700 passos. Altere goal ou cole as contagens da próxima semana para atualizar todas as linhas.