Списки й статистика
Список об’єднує кілька значень під одним ім’ям: кроки за тиждень, оцінки за іспити чи чеки за місяць. Значення списку можна підсумувати, усереднити, оцінити їхній розкид і вибрати потрібні.
Ця сторінка описує запис та індексацію списків, статистичні підсумки, суми рядків вище, теги для підрахунку незалежно від розташування, сортування й зрізи, перетворення через map і filter та арифметику цілих списків. Використовуйте для узагальнення наборів чисел. Списки рядків також можуть утворювати матриці, яким присвячено окрему сторінку.
Запис списку
Помістіть значення у квадратні дужки й розділіть комами:
scores = [72, 85, 91, 64, 88] дорівнює [72, 85, 91, 64, 88]scores[0] дорівнює 72scores[4] дорівнює 88length(scores) дорівнює 5Позиція значення в списку — індекс, який пишеться у квадратних дужках після списку. Індекси починаються з нуля, тому scores[0] — перша оцінка, а scores[4] — п’ята. Останній елемент завжди має індекс length(scores) - 1. Від’ємний, дробовий або завеликий індекс дає помилку; відліку від кінця через від’ємні індекси немає.
Елементами можуть бути обчислення, величини з одиницями або інші списки:
[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.
Роздільники тисяч працюють усередині списку, тож числа можна вставляти як записано. Ставте пробіл після коми між значеннями; кома перед рівно трьома цифрами залишається частиною числа:
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 значення.
Зведена статистика
scores = [72, 85, 91, 64, 88]sum(scores) дорівнює 400average(scores) дорівнює 80median(scores) дорівнює 85min(scores) дорівнює 64max(scores) дорівнює 91count(scores) дорівнює 5mean і avg — інші назви average, total — sum, stdev — stddev, а count — length: звички з електронних таблиць стануть у пригоді. product перемножує значення. Найчастіше значення, процентилі й квартилі описано нижче.
Для іменованого списку статистичний показник можна записати словами:
scores = [72, 85, 91, 64, 88]average of scores дорівнює 80total of scores дорівнює 400sum of, mean of, median of, min of, max of і count of працюють однаково. Після of пишіть ім’я або самі значення через кому, з круглими дужками чи без них. Для значень у квадратних дужках використовуйте форму функції: average([72, 85, 91]).
Більшість статистичних функцій, зокрема sum, product, average, median, min, max, count і stddev, приймають також окремі значення замість списку:
max(72, 85, 91) дорівнює 91sum(1, 2, 3, 4) дорівнює 10average of 70, 85, 91 дорівнює 82mean of (1,2,3) дорівнює 2average(1,200, 1,800) дорівнює 1,500Підсумовування рядків вище
Рядок лише зі словом sum, total, subtotal, grand total, average, max або min обчислює відповідний показник відповідей вище. Він охоплює свій розділ від попереднього підсумку, розділювача --- або заголовка #, тож кожна частина нотатки має власний показник під час введення. Це працює як Subtotal у контекстному меню рядка:
# Groceriesbread = £1.20milk = £1.45eggs = £2.30total дорівнює £4.95# Householdbin bags = £3.50washing up liquid = £1.80total дорівнює £5.30До слова можна додати підпис, надати результату ім’я, перетворити одиницю або дописати коментар, щоб рядок природно вписувався в нотатку:
tickets = £64train = £41.20Estimated total: total дорівнює £105.20est = total зберігає суму під ім’ям, а total // still to book додає коментар. total in kg перетворює результат перед показом, що зручно для суміші грамів і кілограмів. Поруч з оператором статистичне слово означає той самий показник, що й окремим рядком: £5 + subtotal додає п’ять фунтів до поточного підсумку.
# Parcels12 kg дорівнює 12 kg4 kg дорівнює 4 kg850 g дорівнює 850 gtotal in kg дорівнює 16.85 kgmax дорівнює 12 kgЯкщо ви вже визначили значення sum або total, показується воно. Якщо вище немає придатних сум, рядок повідомляє Unsupported: no amounts above to add up замість порожньої відповіді чи нуля. Часто причина — забутий заголовок між рядками.
Кожна сума враховується один раз. Якщо подальший рядок розділу обчислює результат з іменованої суми, підсумок ураховує цей рядок, а не обидва. Тому список цін за одиницю й кількостей дає фактичну суму до сплати:
shirt = £18.50shorts = £99 * shirt дорівнює £166.5010 * shorts дорівнює £90.00fee = £40vat = fee * 20% дорівнює £8.00total дорівнює £304.50shirt і shorts враховуються в рядках, що їх використовують, а fee залишається в підсумку, оскільки vat бере лише його частку.
Це правило простежує весь ланцюжок імен. Якщо нотатка ділить суму на частки, а потім складає їх знову, враховується і рядок суми часток, і початкова сума:
pot = £9001st = 50% of pot дорівнює £450.002nd = 30% of pot дорівнює £270.003rd = 20% of pot дорівнює £180.001st + 2nd + 3rd дорівнює £900.00total дорівнює £900.00Додаються лише сумісні величини. Якщо вище є гроші або величина з одиницею, відсотки, ставки й звичайні кількості пропускаються, як і рядки з помилками. Числа без одиниць, вставлені стовпчиком, додаються, якщо записані з точністю до сотих, як грошові суми; більше десяткових знаків, як у курсу чи множника, виключає число. Підказка підсумку перелічує пропущене, наприклад «Пропущено рядок 3 (people = 2)» або «Пропущено рядок 2 (помилка)», щоб склад суми був зрозумілий.
Дві чи більше неіменованих сум безпосередньо над підсумком і під рядком, обчисленим з імен, підсумовуються окремо. Так бюджет угорі нотатки не враховується повторно в списку під ним:
budget = £18,000remaining = budget - £6,388.25 дорівнює £11,611.75- skip hire £250 дорівнює £250.00- deep clean £120 дорівнює £120.00subtotal дорівнює £370.00Для підсумовування несусідніх рядків позначте їх тегом.
Найчастіші значення
mode повертає значення, що трапляється частіше за всі інші, а modes — список усіх значень із найбільшою частотою:
marks = [3, 4, 4, 5, 5, 5, 6]mode(marks) дорівнює 5modes([1, 1, 2, 2, 3]) дорівнює [1, 2]mode відповідає, лише якщо одне значення строго найчастіше. Якщо повторів немає або кілька значень мають однакову найбільшу частоту, функція повідомляє про це замість довільного вибору:
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):
scores = [72, 85, 91, 64, 88]percentile(scores, 50) дорівнює 85percentile(scores, 25) дорівнює 72quartile(scores, 3) дорівнює 88quartile(scores, 4) дорівнює 91percentile([1, 2, 3, 4], 25) дорівнює 1.75quartile([1, 2, 3, 4], 3) дорівнює 3.2550-й процентиль — медіана, а 0-й і 100-й — quartile(list, 0) та quartile(list, 4) — найменше й найбільше значення, як min і max. Ранг поза допустимими межами дає помилку, а не найближче припустиме значення:
percentile([1, 2, 3, 4], 101) дорівнює Unsupported: A percentile is between 0 and 100quartile([1, 2, 3, 4], 5) дорівнює Unsupported: A quartile is 0, 1, 2, 3 or 4Розкид: дисперсія та стандартне відхилення
scores = [72, 85, 91, 64, 88]variance(scores) дорівнює 132.5stddev(scores) to 1 dp дорівнює 11.5Обидва показники є вибірковими: ділять на кількість значень мінус один (n - 1), як зазвичай роблять для вибірки з більшої сукупності. Потрібно щонайменше два значення. Додайте to 1 dp після будь-якого показника для округлення.
Якщо список є всією генеральною сукупністю, використовуйте відповідні форми: вони ділять на n і потребують лише одного значення:
# Train delays in minutesdelays = [2, 4, 4, 4, 5, 5, 7, 9]sample_variance(delays) дорівнює 4.5714285714population_variance(delays) дорівнює 4sample_stddev(delays) дорівнює 2.1380899353population_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 зберігають одиниці й перетворюють сумісні. Значення приводяться до одиниці першого елемента; результат повертається в ній:
commutes = [24 min, 31 min, 27 min, 22 min]sum(commutes) дорівнює 1 hour 44 minaverage(commutes) дорівнює 26 minmedian(commutes) дорівнює 25.5 minpercentile(commutes, 25) дорівнює 23.5 minpopulation_stddev(commutes) дорівнює 3.3911649916 minsum([1 kg, 500 g]) дорівнює 1.5 kgmodes([1 kg, 500 g, 1 kg, 500 g]) дорівнює [0.5 kg, 1 kg]Виняток — дисперсії: вони підносять спостереження до квадрата й не зберігають одиниць, тому приймають лише числа без одиниць.
sample_variance([1 kg, 2 kg]) дорівнює Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unitsort також працює лише з числами без одиниць. Статистика несумісних одиниць, наприклад sum([1 kg, 3 m]), дає помилку, а не непомітно пропускає значення.
Правила точності наведено в розділі Гарантії обчислювального рушія.
Порожні списки
| Виклик для порожнього списку | Результат |
|---|---|
sum([]) |
0 |
product([]) |
1 |
count([]), length([]) |
0 |
average([]), median([]), min([]), max([]) |
Помилка |
variance([]), stddev([]) |
Помилка |
Порожній список найчастіше утворюється після filter, що не знайшов збігів. Тому average відфільтрованого списку може дати помилку, навіть якщо початковий містив значення.
Теги
Тег — це # зі словом без пробілу, наприклад #food. Напишіть його будь-де в рядку для позначення. Тег не бере участі в обчисленні: рядок і далі показує власну відповідь, але групується з іншими рядками того самого тегу. total of #food підсумовує їх:
£12.50 lunch #food дорівнює £12.50£8 coffee #food дорівнює £8.00flights = £420 #trip дорівнює £420.00total of #food дорівнює £20.50На відміну від проміжного підсумку, тег не вимагає сусідніх рядків. Витрати за тиждень, подорож і покупки можуть бути в одному блоці, кожні зі своєю сумою внизу. Наведіть вказівник на тег, щоб побачити поточний підсумок.
Кожен статистичний показник працює з тегом. of необов’язкове, тег може стояти до або після слова, а відповідь може мати підпис чи власне ім’я, як будь-який рядок:
#food £12.50#food £8£420 #triptotal of #food дорівнює £20.50average of #food дорівнює £10.25count of #food дорівнює 2min of #food дорівнює £8.00max of #food дорівнює £12.50#food total дорівнює £20.50Food this week: sum of #food дорівнює £20.50eaten = avg #food дорівнює £10.25Так читаються sum, total, average, avg, mean, count, min і max.
Показник тегу є значенням, тому його можна використати далі в обчисленні: відняти внесок від поточної суми, масштабувати її або порівняти два теги:
£20 shop #food дорівнює £20.00£30 meal out #food дорівнює £30.00total of #food - £10 дорівнює £40.002 * total of #food дорівнює £100.00Cooking kit: total of #food дорівнює £50.00Рядок може мати скільки завгодно тегів; кожен його враховує. Два теги в одному виразі вибирають рядки, що мають обидва:
£50 dinner #trip #food дорівнює £50.00£30 taxi #trip дорівнює £30.00£9 sandwich #food дорівнює £9.00total of #trip дорівнює £80.00total of #food дорівнює £59.00total of #trip #food дорівнює £50.00Що охоплює підсумок за тегом
Вираз із тегом охоплює ті самі рядки, що й звичайний total, і дотримується тих самих правил:
- Він охоплює свій розділ до попереднього підсумку, розділювача
---або заголовка#. - Додає лише сумісні величини. Відсотки, ставки, звичайні кількості й рядки з помилками пропускаються та перелічуються в підказці, наприклад «Пропущено рядок 2 (people = 2)».
- Кожна сума враховується один раз: ціна з тегом, яку множить подальший рядок із тим самим тегом, ураховується через цей рядок, а не двічі.
Отже, заголовка достатньо, щоб відокремити #food одного тижня від наступного:
# Week 1£20 lunch #food дорівнює £20.00total of #food дорівнює £20.00# Week 2£30 lunch #food дорівнює £30.00total of #food дорівнює £30.00Якщо немає що додавати, рядок повідомляє про це замість порожньої відповіді чи нуля. Зазвичай причина — помилка в тегу або забутий заголовок:
£12.50 lunch #food дорівнює £12.50total of #drinks дорівнює Unsupported: no lines tagged #drinks abovering the plumber #jobstotal of #jobs дорівнює Unsupported: no amounts tagged #jobs aboveЗапис назв тегів
Ім’я тегу може містити літери, цифри, _, - і /, тому #q1-2026 та #trip/lisbon — окремі цілі імена. Регістр неважливий:
£20 flight #trip/lisbon дорівнює £20.00£35 hotel #Trip/Lisbon дорівнює £35.00total 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 |
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 залишає елементи, що відповідають умові. В обох спочатку йде вираз, потім ім’я для поточного елемента й список:
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)) дорівнює 3average(filter(s >= 80, s, scores)) дорівнює 88Читайте filter(s >= 80, s, scores) як «значення s зі scores, для яких s >= 80». Обидві функції працюють з одиницями й грошима:
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Вибране ім’я існує лише всередині виклику й не змінює однойменне значення в інших місцях нотатки:
x = 10map(x * 2, x, [1, 2, 3]) дорівнює [2, 4, 6]x дорівнює 10Умова filter має бути порівнянням або іншим логічним значенням. Звичайне число не вважається істинним, тому filter(x, x, [0, 1, 2]) дає помилку. Перетворення чи фільтрація порожнього списку повертає порожній список.
Арифметика списків
Можна множити або ділити кожне значення на одне число, а також поелементно додавати чи віднімати списки однакової довжини:
[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 може працювати з рядками:
# 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 до рядків, як в останньому прикладі, або виділіть стовпець в окремий список.
Точні правила всіх цих операцій наведено в довіднику з вищої математики.
Поєднання можливостей
Ось кількість кроків із годинника за тиждень і щоденна ціль:
# Steps, Monday to Sundaysteps = [8200, 10400, 6300, 12000, 9100, 7400, 9600]goal = 9000sum(steps) дорівнює 63,000average(steps) дорівнює 9,000median(steps) дорівнює 9,100Days on target: count(filter(s >= goal, s, steps)) дорівнює 4Spread: max(steps) - min(steps) дорівнює 5,700# Roughly 0.75 m per stepwalked = sum(steps) * 0.75 mwalked in km дорівнює 47.25 kmСереднє точно дорівнює цілі, але її досягнуто лише чотири дні, а різниця між найкращим і найгіршим днем — 5700 кроків. Змініть goal або вставте дані наступного тижня — усі рядки оновляться.