Перейти до вмісту
Посібник Varlig
Головна сторінка Varlig

Списки й статистика

Список об’єднує кілька значень під одним ім’ям: кроки за тиждень, оцінки за іспити чи чеки за місяць. Значення списку можна підсумувати, усереднити, оцінити їхній розкид і вибрати потрібні.

Ця сторінка описує запис та індексацію списків, статистичні підсумки, суми рядків вище, теги для підрахунку незалежно від розташування, сортування й зрізи, перетворення через map і filter та арифметику цілих списків. Використовуйте для узагальнення наборів чисел. Списки рядків також можуть утворювати матриці, яким присвячено окрему сторінку.

Запис списку

Помістіть значення у квадратні дужки й розділіть комами:

calc
scores = [72, 85, 91, 64, 88] дорівнює [72, 85, 91, 64, 88]
scores[0] дорівнює 72
scores[4] дорівнює 88
length(scores) дорівнює 5

Позиція значення в списку — індекс, який пишеться у квадратних дужках після списку. Індекси починаються з нуля, тому scores[0] — перша оцінка, а scores[4] — п’ята. Останній елемент завжди має індекс length(scores) - 1. Від’ємний, дробовий або завеликий індекс дає помилку; відліку від кінця через від’ємні індекси немає.

Елементами можуть бути обчислення, величини з одиницями або інші списки:

calc
[2 * 45, 60 + 15] дорівнює [90, 75]
[1.5 kg, 750 g] дорівнює [1.5 kg, 750 g]
[[1, 2], [3, 4]][1][0] дорівнює 3

Для вкладених списків перший індекс вибирає внутрішній список, другий — значення в ньому: [1] вибирає [3, 4], а потім [0] — 3.

Роздільники тисяч працюють усередині списку, тож числа можна вставляти як записано. Ставте пробіл після коми між значеннями; кома перед рівно трьома цифрами залишається частиною числа:

calc
salaries = [£32,000, £41,500, £38,250] дорівнює [£32,000.00, £41,500.00, £38,250.00]
average(salaries) дорівнює £37,250.00

Кілька зауваг:

  • Без пробілів кожна кома розділяє значення: [8200,10400] містить два числа. [100,200,300] може означати одне число або три, тому Varlig показує помилку з обома трактуваннями.
  • У відповідях є роздільники тисяч і пробіли після ком між елементами, тому [8,200, 10,400] — список із двох значень.
  • Список містить щонайбільше 1024 значення.

Зведена статистика

calc
scores = [72, 85, 91, 64, 88]
sum(scores) дорівнює 400
average(scores) дорівнює 80
median(scores) дорівнює 85
min(scores) дорівнює 64
max(scores) дорівнює 91
count(scores) дорівнює 5

mean і avg — інші назви average, total — sum, stdev — stddev, а count — length: звички з електронних таблиць стануть у пригоді. product перемножує значення. Найчастіше значення, процентилі й квартилі описано нижче.

Для іменованого списку статистичний показник можна записати словами:

calc
scores = [72, 85, 91, 64, 88]
average of scores дорівнює 80
total of scores дорівнює 400

sum of, mean of, median of, min of, max of і count of працюють однаково. Після of пишіть ім’я або самі значення через кому, з круглими дужками чи без них. Для значень у квадратних дужках використовуйте форму функції: average([72, 85, 91]).

Більшість статистичних функцій, зокрема sum, product, average, median, min, max, count і stddev, приймають також окремі значення замість списку:

calc
max(72, 85, 91) дорівнює 91
sum(1, 2, 3, 4) дорівнює 10
average of 70, 85, 91 дорівнює 82
mean of (1,2,3) дорівнює 2
average(1,200, 1,800) дорівнює 1,500

Підсумовування рядків вище

Рядок лише зі словом sum, total, subtotal, grand total, average, max або min обчислює відповідний показник відповідей вище. Він охоплює свій розділ від попереднього підсумку, розділювача --- або заголовка #, тож кожна частина нотатки має власний показник під час введення. Це працює як Subtotal у контекстному меню рядка:

calc
# Groceries
bread = £1.20
milk = £1.45
eggs = £2.30
total дорівнює £4.95
# Household
bin bags = £3.50
washing up liquid = £1.80
total дорівнює £5.30

До слова можна додати підпис, надати результату ім’я, перетворити одиницю або дописати коментар, щоб рядок природно вписувався в нотатку:

calc
tickets = £64
train = £41.20
Estimated total: total дорівнює £105.20

est = total зберігає суму під ім’ям, а total // still to book додає коментар. total in kg перетворює результат перед показом, що зручно для суміші грамів і кілограмів. Поруч з оператором статистичне слово означає той самий показник, що й окремим рядком: £5 + subtotal додає п’ять фунтів до поточного підсумку.

calc
# Parcels
12 kg дорівнює 12 kg
4 kg дорівнює 4 kg
850 g дорівнює 850 g
total in kg дорівнює 16.85 kg
max дорівнює 12 kg

Якщо ви вже визначили значення sum або total, показується воно. Якщо вище немає придатних сум, рядок повідомляє Unsupported: no amounts above to add up замість порожньої відповіді чи нуля. Часто причина — забутий заголовок між рядками.

Кожна сума враховується один раз. Якщо подальший рядок розділу обчислює результат з іменованої суми, підсумок ураховує цей рядок, а не обидва. Тому список цін за одиницю й кількостей дає фактичну суму до сплати:

calc
shirt = £18.50
shorts = £9
9 * shirt дорівнює £166.50
10 * shorts дорівнює £90.00
fee = £40
vat = fee * 20% дорівнює £8.00
total дорівнює £304.50

shirt і shorts враховуються в рядках, що їх використовують, а fee залишається в підсумку, оскільки vat бере лише його частку.

Це правило простежує весь ланцюжок імен. Якщо нотатка ділить суму на частки, а потім складає їх знову, враховується і рядок суми часток, і початкова сума:

calc
pot = £900
1st = 50% of pot дорівнює £450.00
2nd = 30% of pot дорівнює £270.00
3rd = 20% of pot дорівнює £180.00
1st + 2nd + 3rd дорівнює £900.00
total дорівнює £900.00

Додаються лише сумісні величини. Якщо вище є гроші або величина з одиницею, відсотки, ставки й звичайні кількості пропускаються, як і рядки з помилками. Числа без одиниць, вставлені стовпчиком, додаються, якщо записані з точністю до сотих, як грошові суми; більше десяткових знаків, як у курсу чи множника, виключає число. Підказка підсумку перелічує пропущене, наприклад «Пропущено рядок 3 (people = 2)» або «Пропущено рядок 2 (помилка)», щоб склад суми був зрозумілий.

Дві чи більше неіменованих сум безпосередньо над підсумком і під рядком, обчисленим з імен, підсумовуються окремо. Так бюджет угорі нотатки не враховується повторно в списку під ним:

calc
budget = £18,000
remaining = budget - £6,388.25 дорівнює £11,611.75
- skip hire £250 дорівнює £250.00
- deep clean £120 дорівнює £120.00
subtotal дорівнює £370.00

Для підсумовування несусідніх рядків позначте їх тегом.

Найчастіші значення

mode повертає значення, що трапляється частіше за всі інші, а modes — список усіх значень із найбільшою частотою:

calc
marks = [3, 4, 4, 5, 5, 5, 6]
mode(marks) дорівнює 5
modes([1, 1, 2, 2, 3]) дорівнює [1, 2]

mode відповідає, лише якщо одне значення строго найчастіше. Якщо повторів немає або кілька значень мають однакову найбільшу частоту, функція повідомляє про це замість довільного вибору:

calc
mode([1, 2, 3]) дорівнює Unsupported: No value repeats, so this list has no mode; use median or average instead

Процентилі й квартилі

percentile(list, rank) приймає ранг від 0 до 100 і повертає відповідне значення, інтерполюючи між двома найближчими спостереженнями. quartile(list, k) робить те саме для чвертей із k від 0 до 4: quartile(list, 1) дорівнює percentile(list, 25):

calc
scores = [72, 85, 91, 64, 88]
percentile(scores, 50) дорівнює 85
percentile(scores, 25) дорівнює 72
quartile(scores, 3) дорівнює 88
quartile(scores, 4) дорівнює 91
percentile([1, 2, 3, 4], 25) дорівнює 1.75
quartile([1, 2, 3, 4], 3) дорівнює 3.25

50-й процентиль — медіана, а 0-й і 100-й — quartile(list, 0) та quartile(list, 4) — найменше й найбільше значення, як min і max. Ранг поза допустимими межами дає помилку, а не найближче припустиме значення:

calc
percentile([1, 2, 3, 4], 101) дорівнює Unsupported: A percentile is between 0 and 100
quartile([1, 2, 3, 4], 5) дорівнює Unsupported: A quartile is 0, 1, 2, 3 or 4

Розкид: дисперсія та стандартне відхилення

calc
scores = [72, 85, 91, 64, 88]
variance(scores) дорівнює 132.5
stddev(scores) to 1 dp дорівнює 11.5

Обидва показники є вибірковими: ділять на кількість значень мінус один (n - 1), як зазвичай роблять для вибірки з більшої сукупності. Потрібно щонайменше два значення. Додайте to 1 dp після будь-якого показника для округлення.

Якщо список є всією генеральною сукупністю, використовуйте відповідні форми: вони ділять на n і потребують лише одного значення:

calc
# Train delays in minutes
delays = [2, 4, 4, 4, 5, 5, 7, 9]
sample_variance(delays) дорівнює 4.5714285714
population_variance(delays) дорівнює 4
sample_stddev(delays) дорівнює 2.1380899353
population_stddev(delays) дорівнює 2
Виклик Ділить суму квадратів відхилень на Потребує
variance, sample_variance n - 1 Двох значень
population_variance n Одного значення
stddev, stdev, sample_stddev n - 1 Двох значень
population_stddev n Одного значення

sample_variance та sample_stddev — повніші назви variance і stddev, які явно вказують на вибірку. Короткі назви завжди означали й далі означають вибіркові форми.

Списки з одиницями

sum, average, median, mode, modes, percentile, quartile, min, max, stddev і population_stddev зберігають одиниці й перетворюють сумісні. Значення приводяться до одиниці першого елемента; результат повертається в ній:

calc
commutes = [24 min, 31 min, 27 min, 22 min]
sum(commutes) дорівнює 1 hour 44 min
average(commutes) дорівнює 26 min
median(commutes) дорівнює 25.5 min
percentile(commutes, 25) дорівнює 23.5 min
population_stddev(commutes) дорівнює 3.3911649916 min
sum([1 kg, 500 g]) дорівнює 1.5 kg
modes([1 kg, 500 g, 1 kg, 500 g]) дорівнює [0.5 kg, 1 kg]

Виняток — дисперсії: вони підносять спостереження до квадрата й не зберігають одиниць, тому приймають лише числа без одиниць.

calc
sample_variance([1 kg, 2 kg]) дорівнює Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unit

sort також працює лише з числами без одиниць. Статистика несумісних одиниць, наприклад sum([1 kg, 3 m]), дає помилку, а не непомітно пропускає значення.

Правила точності наведено в розділі Гарантії обчислювального рушія.

Порожні списки

Виклик для порожнього списку Результат
sum([]) 0
product([]) 1
count([]), length([]) 0
average([]), median([]), min([]), max([]) Помилка
variance([]), stddev([]) Помилка

Порожній список найчастіше утворюється після filter, що не знайшов збігів. Тому average відфільтрованого списку може дати помилку, навіть якщо початковий містив значення.

Теги

Тег — це # зі словом без пробілу, наприклад #food. Напишіть його будь-де в рядку для позначення. Тег не бере участі в обчисленні: рядок і далі показує власну відповідь, але групується з іншими рядками того самого тегу. total of #food підсумовує їх:

calc
£12.50 lunch #food дорівнює £12.50
£8 coffee #food дорівнює £8.00
flights = £420 #trip дорівнює £420.00
total of #food дорівнює £20.50

На відміну від проміжного підсумку, тег не вимагає сусідніх рядків. Витрати за тиждень, подорож і покупки можуть бути в одному блоці, кожні зі своєю сумою внизу. Наведіть вказівник на тег, щоб побачити поточний підсумок.

Кожен статистичний показник працює з тегом. of необов’язкове, тег може стояти до або після слова, а відповідь може мати підпис чи власне ім’я, як будь-який рядок:

calc
#food £12.50
#food £8
£420 #trip
total of #food дорівнює £20.50
average of #food дорівнює £10.25
count of #food дорівнює 2
min of #food дорівнює £8.00
max of #food дорівнює £12.50
#food total дорівнює £20.50
Food this week: sum of #food дорівнює £20.50
eaten = avg #food дорівнює £10.25

Так читаються sum, total, average, avg, mean, count, min і max.

Показник тегу є значенням, тому його можна використати далі в обчисленні: відняти внесок від поточної суми, масштабувати її або порівняти два теги:

calc
£20 shop #food дорівнює £20.00
£30 meal out #food дорівнює £30.00
total of #food - £10 дорівнює £40.00
2 * total of #food дорівнює £100.00
Cooking kit: total of #food дорівнює £50.00

Рядок може мати скільки завгодно тегів; кожен його враховує. Два теги в одному виразі вибирають рядки, що мають обидва:

calc
£50 dinner #trip #food дорівнює £50.00
£30 taxi #trip дорівнює £30.00
£9 sandwich #food дорівнює £9.00
total of #trip дорівнює £80.00
total of #food дорівнює £59.00
total of #trip #food дорівнює £50.00

Що охоплює підсумок за тегом

Вираз із тегом охоплює ті самі рядки, що й звичайний total, і дотримується тих самих правил:

  • Він охоплює свій розділ до попереднього підсумку, розділювача --- або заголовка #.
  • Додає лише сумісні величини. Відсотки, ставки, звичайні кількості й рядки з помилками пропускаються та перелічуються в підказці, наприклад «Пропущено рядок 2 (people = 2)».
  • Кожна сума враховується один раз: ціна з тегом, яку множить подальший рядок із тим самим тегом, ураховується через цей рядок, а не двічі.

Отже, заголовка достатньо, щоб відокремити #food одного тижня від наступного:

calc
# Week 1
£20 lunch #food дорівнює £20.00
total of #food дорівнює £20.00
# Week 2
£30 lunch #food дорівнює £30.00
total of #food дорівнює £30.00

Якщо немає що додавати, рядок повідомляє про це замість порожньої відповіді чи нуля. Зазвичай причина — помилка в тегу або забутий заголовок:

calc
£12.50 lunch #food дорівнює £12.50
total of #drinks дорівнює Unsupported: no lines tagged #drinks above
ring the plumber #jobs
total of #jobs дорівнює Unsupported: no amounts tagged #jobs above

Запис назв тегів

Ім’я тегу може містити літери, цифри, _, - і /, тому #q1-2026 та #trip/lisbon — окремі цілі імена. Регістр неважливий:

calc
£20 flight #trip/lisbon дорівнює £20.00
£35 hotel #Trip/Lisbon дорівнює £35.00
total of #trip/lisbon дорівнює £55.00

# без прилеглого слова зберігає попереднє значення, тож наявні записи не змінюються:

Ваш запис Значення
# Weekly shop Коментар через пробіл після решітки
5 + 5 # comment Те саме: усе після решітки ігнорується
C#4 in Hz Музичний дієз, бо решітка приєднана до ноти
#1, Invoice #123 Число, а не тег: назва тегу не може починатися з цифри
#ff0000, #fff Код кольору
varlig.app/docs#tags Вебадреса з фрагментом

Ім’я тегу має починатися з літери. Три, чотири, шість або вісім шістнадцяткових цифр після решітки читаються як колір: #fee — колір, а #fees — тег.

Теги в нотатці й теги в блоці

Теги для впорядкування нотаток у бічній панелі описано в розділі Теги, посилання й зворотні посилання. Їхня дія не поширюється всередину блоків обчислень: #food у блоці позначає рядок для підсумку й не з’являється в бічній панелі, а #food у тексті навколо блоку впорядковує нотатку, не впливаючи на суми. Для обох дій пишіть тег в обох місцях. Є й відмінність у записі: тег нотатки може містити пробіли, якщо закрити його другим #, а тег блоку обчислень завжди закінчується на першому пробілі.

Довідник списків

Виклик Призначення
range(start,end) Цілі числа від start до end включно
range(start,end,step) Відлік із кроком step, який може бути від'ємним або дробовим, але не нульовим
length(list), count(list) Кількість значень
sort(list) Від найменшого до найбільшого; лише числа без одиниць
reverse(list) Ті самі значення у зворотному порядку; будь-які значення
unique(list) Збереження першого входження кожного значення
slice(list,start,end) Значення від індексу start включно до індексу end невключно
map(expression,variable,list) Обчислення виразу один раз для кожного значення
filter(condition,variable,list) Збереження значень, для яких умова дає true
calc
range(1, 5) дорівнює [1, 2, 3, 4, 5]
range(0, 100, 25) дорівнює [0, 25, 50, 75, 100]
range(10, 0, -2) дорівнює [10, 8, 6, 4, 2, 0]
scores = [72, 85, 91, 64, 88]
sort(scores) дорівнює [64, 72, 85, 88, 91]
reverse(sort(scores)) дорівнює [91, 88, 85, 72, 64]
slice(sort(scores), 0, 3) дорівнює [64, 72, 85]
unique([4, 2, 4, 6, 2]) дорівнює [4, 2, 6]

reverse(sort(…)) упорядковує від найбільшого, а slice(sort(…), 0, 3) вибирає три найменші значення.

Межі зрізу мають відповідати 0 <= start <= end <= length. Однакові start та end дають порожній список. Скорочення scores[0:2] немає; пишіть slice(scores, 0, 2).

unique порівнює збережені значення точно: 1 kg і 1000 g вважаються різними, а результати з різницею в десятому десятковому знаку не об’єднуються.

Map і filter

map обчислює вираз для кожного елемента списку, а filter залишає елементи, що відповідають умові. В обох спочатку йде вираз, потім ім’я для поточного елемента й список:

calc
scores = [72, 85, 91, 64, 88]
map(s + 5, s, scores) дорівнює [77, 90, 96, 69, 93]
filter(s >= 80, s, scores) дорівнює [85, 91, 88]
count(filter(s >= 80, s, scores)) дорівнює 3
average(filter(s >= 80, s, scores)) дорівнює 88

Читайте filter(s >= 80, s, scores) як «значення s зі scores, для яких s >= 80». Обидві функції працюють з одиницями й грошима:

calc
map(p * 1.2, p, [£10, £25, £40]) дорівнює [£12.00, £30.00, £48.00]
spend = [£42.50, £18.20, £65.00, £23.30]
filter(x > £30, x, spend) дорівнює [£42.50, £65.00]
sum(filter(x > £30, x, spend)) дорівнює £107.50

Вибране ім’я існує лише всередині виклику й не змінює однойменне значення в інших місцях нотатки:

calc
x = 10
map(x * 2, x, [1, 2, 3]) дорівнює [2, 4, 6]
x дорівнює 10

Умова filter має бути порівнянням або іншим логічним значенням. Звичайне число не вважається істинним, тому filter(x, x, [0, 1, 2]) дає помилку. Перетворення чи фільтрація порожнього списку повертає порожній список.

Арифметика списків

Можна множити або ділити кожне значення на одне число, а також поелементно додавати чи віднімати списки однакової довжини:

calc
[30, 36, 22] / 40 * 100 дорівнює [75, 90, 55]
2 * [3, 1, 4] дорівнює [6, 2, 8]
-[5, -3] дорівнює [-5, 3]
mocks = [62, 70, 60]
finals = [72, 78, 69]
finals - mocks дорівнює [10, 8, 9]
average(finals - mocks) дорівнює 9
[1 kg, 2 kg] + [500 g, 500 g] дорівнює [1.5 kg, 2.5 kg]
[72, 85] == [72, 85] дорівнює true

Перший рядок перетворює оцінки з 40 балів на відсотки. finals - mocks зіставляє пробну й підсумкову оцінку кожного учня.

Деякі операції зі списками не підтримуються:

  • Додавання одного числа до списку, як у scores + 5. Натомість використовуйте map(s + 5, s, scores).
  • Додавання списків різної довжини. Значення не повторюються для вирівнювання довжин.
  • Множення двох одновимірних списків через *. Для суми попарних добутків використовуйте dot: dot([2, 3, 1], [4, 5, 10]) дає 33 — наприклад, дві кави по 4, три чаї по 5 й одне тістечко за 10. Для списків рядків * означає матричне множення; див. Вектори й матриці.

Списки рядків

Список рядків працює як невелика таблиця. average і sum обчислюють показники за стовпцями, а map може працювати з рядками:

calc
# Each row is one student: [mock, final]
results = [[62, 72], [70, 78], [60, 69]]
average(results) дорівнює [64, 73]
sum(results) дорівнює [192, 219]
map(average(r), r, results) дорівнює [67, 74, 64.5]

median, min, max і stddev не приймають списків рядків. Застосуйте map до рядків, як в останньому прикладі, або виділіть стовпець в окремий список.

Точні правила всіх цих операцій наведено в довіднику з вищої математики.

Поєднання можливостей

Ось кількість кроків із годинника за тиждень і щоденна ціль:

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

Середнє точно дорівнює цілі, але її досягнуто лише чотири дні, а різниця між найкращим і найгіршим днем — 5700 кроків. Змініть goal або вставте дані наступного тижня — усі рядки оновляться.