Lists: збереження багатьох значень

Повертаємось до Python.
У попередній лекції ти вивчив loops.
Твої програми навчилися повторювати роботу за допомогою:
for
while
Дуже добре.
Тепер Python може автоматично повторювати завдання.
Може рахувати.
Може питати знову.
Може рахувати totals.
Може показувати menus.
Красиво.
Але тепер маємо іншу проблему.
Що робити, якщо треба зберегти багато значень?
Наприклад:
Список продуктів.
Список користувачів.
Список оцінок.
Список міст.
Список задач.
Список паролів, які не треба зберігати plain text.
Без lists можна написати так:
product1 = "Keyboard"
product2 = "Mouse"
product3 = "Notebook"
Це працює.
Але дуже швидко стає некрасиво.
А якщо продуктів 100?
Ти справді будеш писати:
product100 = "Something"
Будь ласка, ні.
Python має кращий спосіб.
Lists.
Lists дозволяють зберігати багато значень в одній variable.
Дуже корисно.
Дуже поширено.
Дуже Python.
Що ти вивчиш
У цій лекції ти вивчиш:
- що таке list;
- як створити list;
- як отримувати items зі list;
- як працюють indexes;
- чому indexes починаються з 0;
- як оновлювати items у list;
- як додавати items через
append(); - як видаляти items через
remove(); - як використовувати
len(); - як проходити по lists через loops;
- як поєднувати lists з conditions;
- як перевіряти, чи item існує;
- типові помилки початківців;
- як будувати маленькі програми на основі lists.
До кінця цієї лекції твої програми зможуть працювати з collections of data.
Це дуже великий крок.
Бо реальні програми майже ніколи не працюють тільки з одним значенням.
Вони працюють з багатьма значеннями.
Багато користувачів.
Багато продуктів.
Багато задач.
Багато проблем.
Дуже реалістично.
Дуже програмування.
Що таке list?
List — це collection of values.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
Тут:
products
це одна variable.
Але вона зберігає три значення:
Keyboard
Mouse
Notebook
List використовує square brackets:
[]
Items всередині list розділяються commas:
["Keyboard", "Mouse", "Notebook"]
Це набагато краще, ніж писати:
product1 = "Keyboard"
product2 = "Mouse"
product3 = "Notebook"
Lists тримають пов’язані значення разом.
Як маленька коробка.
Але цифрова.
І з меншою ймовірністю знайти всередині випадкові кабелі.
Твій перший list
Створи файл:
lists.py
Напиши:
products = ["Keyboard", "Mouse", "Notebook"]
print(products)
Запусти:
python lists.py
або:
python3 lists.py
Output:
['Keyboard', 'Mouse', 'Notebook']
Python виводить увесь list.
Зверни увагу, що Python показує square brackets і quotes.
Це нормально.
Він показує структуру list.
List — це не просто text.
Це collection.
Маленький контейнер для values.
Дуже організовано.
Підозріло організовано.
Lists можуть зберігати різні types
List може зберігати різні types of values.
Приклад:
mixed_list = ["Anna", 25, 19.99, True]
print(mixed_list)
Output:
['Anna', 25, 19.99, True]
Це працює.
Але будь обережним.
Те, що Python щось дозволяє, не означає, що це завжди хороша ідея.
Часто lists зрозуміліші, коли зберігають схожі речі.
Добре:
prices = [10.99, 25.50, 5.00]
names = ["Anna", "Marco", "Sofia"]
scores = [90, 85, 72]
Менш зрозуміло:
random_things = ["Anna", 42, True, "Pizza", 3.14]
Python дає свободу.
Свобода красива.
Свобода також може створити хаос у square brackets.
Використовуй відповідально.
Доступ до items через index
Кожен item у list має position.
Ця position називається index.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
print(products[0])
print(products[1])
print(products[2])
Output:
Keyboard
Mouse
Notebook
Важливо:
Перший item має index 0.
Не 1.
Python починає рахувати з нуля.
Знову.
Python і нуль досі дуже близькі друзі.
Тобто:
products[0] -> Keyboard
products[1] -> Mouse
products[2] -> Notebook
Це дуже важливо.
Indexes — це спосіб отримати конкретні items зі list.
Indexes починаються з 0
Це один із найчастіших сюрпризів для початківців.
Можна очікувати, що:
products[1]
означає перший item.
Але ні.
У Python:
products[0]
означає перший item.
Приклад:
cities = ["Rome", "Milan", "Naples"]
print(cities[0])
Output:
Rome
Якщо хочеш другий item:
print(cities[1])
Output:
Milan
Спочатку це здається дивним.
Потім стає нормальним.
Потім ти починаєш рахувати з нуля в голові.
У цей момент програмування тебе вже змінило.
Не обов’язково в гірший бік.
Напевно.
Отримання останнього item
Можна використовувати negative indexes.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
print(products[-1])
Output:
Notebook
-1 означає:
останній item
Інші приклади:
print(products[-2])
print(products[-3])
Output:
Mouse
Keyboard
Negative indexes рахують з кінця.
Дуже корисно.
Дуже Python.
Дуже “я хочу останню річ, але не хочу все рахувати”.
Іноді Python буває добрим.
Оновлення item у list
Lists можна змінювати.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
products[1] = "Gaming Mouse"
print(products)
Output:
['Keyboard', 'Gaming Mouse', 'Notebook']
Ми змінили item з index 1.
Було:
Mouse
Стало:
Gaming Mouse
Пам’ятай:
index 1 — це другий item
Python робить саме те, що ти просиш.
Навіть якщо ти забув, що indexes починаються з нуля.
Python не захищає тебе від твоєї власної впевненості.
Дуже навчально.
Додавання items через append()
Можна додати item у кінець list через append().
Приклад:
products = ["Keyboard", "Mouse"]
products.append("Notebook")
print(products)
Output:
['Keyboard', 'Mouse', 'Notebook']
append() додає один item у кінець.
Це дуже поширено.
Приклад з user input:
products = []
product = input("Product name: ")
products.append(product)
print(products)
Якщо користувач введе:
Keyboard
Output:
['Keyboard']
Empty list починається так:
products = []
Потім можна додавати items пізніше.
Дуже корисно.
Дуже гнучко.
Дуже “будуємо list по дорозі”.
Додавання кількох items
Можна викликати append() багато разів.
Приклад:
products = []
products.append("Keyboard")
products.append("Mouse")
products.append("Notebook")
print(products)
Output:
['Keyboard', 'Mouse', 'Notebook']
Це корисно, коли values приходять один за одним.
Наприклад:
user input
data from a file
data from a database
data from an API
Lists всюди.
Вони як сумки для data.
Але менш хаотичні.
Якщо тільки ти сам не покладеш туди хаотичні data.
Тоді це вже твоя відповідальність.
Напевно.
Видалення items через remove()
Можна видалити item за value через remove().
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
products.remove("Mouse")
print(products)
Output:
['Keyboard', 'Notebook']
remove() видаляє перший matching item.
Важливо:
products.remove("Mouse")
означає:
Знайди "Mouse" і видали його.
Не означає:
Видали item з index Mouse.
Бо це було б абсурдно.
Python приймає багато речей.
Але не це.
remove() потребує existing item
Якщо ти спробуєш видалити item, якого немає, Python дасть error.
Приклад:
products = ["Keyboard", "Mouse"]
products.remove("Notebook")
Error:
ValueError
Чому?
Бо "Notebook" немає у list.
Пізніше ми навчимося краще обробляти errors.
Поки що можна спочатку перевіряти:
products = ["Keyboard", "Mouse"]
if "Notebook" in products:
products.remove("Notebook")
else:
print("Notebook is not in the list.")
Це безпечніше.
Програма перевіряє перед видаленням.
Дуже відповідально.
Дуже доросло.
На відміну від деякого коду, написаного о 2 ночі.
Перевірка, чи item існує
Використовуй in, щоб перевірити, чи item є в list.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
if "Mouse" in products:
print("Mouse is available.")
else:
print("Mouse is not available.")
Output:
Mouse is available.
Можна також перевірити протилежне через not in:
if "Monitor" not in products:
print("Monitor is missing.")
Output:
Monitor is missing.
Це дуже корисно.
Ти часто будеш використовувати in.
Lists і in — хороші друзі.
Як Python і нуль.
Але менш підозрілі.
Довжина list через len()
len() каже, скільки items є в list.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
print(len(products))
Output:
3
Це означає, що list має 3 items.
Можна використовувати це в messages:
products = ["Keyboard", "Mouse", "Notebook"]
print(f"We have {len(products)} products.")
Output:
We have 3 products.
len() дуже корисний.
Він працює з lists.
Він також працює зі strings.
Приклад:
word = "Python"
print(len(word))
Output:
6
Python любить рахувати речі.
Дуже helpful.
Енергія бухгалтера.
Прохід по list через loop
Lists і loops дуже добре працюють разом.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
for product in products:
print(product)
Output:
Keyboard
Mouse
Notebook
Це означає:
Для кожного product у products list, виведи product.
Це один із найважливіших patterns у Python.
List зберігає багато values.
Loop обробляє їх один за одним.
Дуже потужно.
Дуже поширено.
Дуже “тепер ми справді програмуємо”.
Кращий output з lists
Можна поєднувати loops і f-strings.
Приклад:
products = ["Keyboard", "Mouse", "Notebook"]
for product in products:
print(f"Product: {product}")
Output:
Product: Keyboard
Product: Mouse
Product: Notebook
Так виглядає чистіше.
Можна також додати numbering:
products = ["Keyboard", "Mouse", "Notebook"]
number = 1
for product in products:
print(f"{number}. {product}")
number += 1
Output:
1. Keyboard
2. Mouse
3. Notebook
Це працює.
Але Python має ще кращий tool для numbering.
Ми вивчимо його скоро.
Не зараз.
Один дракон за раз.
Прохід по prices
Lists можуть зберігати numbers.
Приклад:
prices = [10.99, 25.50, 5.00]
for price in prices:
print(f"Price: {price:.2f}")
Output:
Price: 10.99
Price: 25.50
Price: 5.00
Можна порахувати total:
prices = [10.99, 25.50, 5.00]
total = 0
for price in prices:
total += price
print(f"Total: {total:.2f}")
Output:
Total: 41.49
Це дуже поширений pattern:
list of numbers
loop through numbers
calculate total
Просто.
Корисно.
Дуже реально.
Багато invoices починаються саме так.
Потім приходять taxes.
І музика стає темнішою.
Пошук найбільшого number
Можна використовувати loop, щоб знайти найбільше number.
Приклад:
scores = [75, 90, 62, 88]
highest_score = scores[0]
for score in scores:
if score > highest_score:
highest_score = score
print(f"Highest score: {highest_score}")
Output:
Highest score: 90
Що відбувається?
Спочатку припускаємо, що перший score найбільший.
Перевіряємо кожен score.
Якщо score більший, оновлюємо highest_score.
Виводимо фінальний result.
Це класичний programming pattern.
Взяти starting value.
Loop.
Compare.
Update.
Дуже корисно.
Дуже algorithmic.
Звучить fancy.
Але це просто уважна перевірка.
Як шукати найбільшу картоплю в мішку.
Computer science — це glamour.
Empty lists
Empty list не має items.
Приклад:
products = []
print(products)
print(len(products))
Output:
[]
0
Empty lists корисні, коли ти хочеш додати items пізніше.
Приклад:
products = []
products.append("Keyboard")
products.append("Mouse")
print(products)
Output:
['Keyboard', 'Mouse']
Багато програм починаються з empty list.
Потім вони її заповнюють.
Це дуже нормально.
Empty list не є useless.
Він просто чекає data.
Як кошик.
Дуже терплячий кошик.
Побудова list з user input
Створи файл:
product_list.py
Напиши:
products = []
product_count = int(input("How many products? "))
for number in range(1, product_count + 1):
product = input(f"Product {number}: ")
products.append(product)
print("Your products:")
for product in products:
print(f"- {product}")
Приклад взаємодії:
How many products? 3
Product 1: Keyboard
Product 2: Mouse
Product 3: Notebook
Output:
Your products:
- Keyboard
- Mouse
- Notebook
Це справжня програма, яка будує list.
Користувач дає values.
Python зберігає їх у list.
Потім Python проходить по list і виводить їх.
Дуже корисно.
Дуже beginner-friendly.
Дуже близько до real applications.
Lists з conditions
Можна використовувати conditions під час проходу по list.
Приклад:
prices = [10.99, 120.00, 5.50, 250.00]
for price in prices:
if price >= 100:
print(f"Expensive item: {price:.2f}")
Output:
Expensive item: 120.00
Expensive item: 250.00
Це означає:
Пройди через усі prices.
Виведи тільки prices, які 100 або більше.
Це filtering.
Filtering означає:
Показати тільки items, які відповідають condition.
Дуже поширено.
Дуже корисно.
Дуже database-like.
PostgreSQL гордо дивиться з кута кімнати.
Створення нового filtered list
Можна створити новий list з selected items.
Приклад:
prices = [10.99, 120.00, 5.50, 250.00]
expensive_prices = []
for price in prices:
if price >= 100:
expensive_prices.append(price)
print(expensive_prices)
Output:
[120.0, 250.0]
Що відбувається?
Починаємо з empty list.
Проходимо через усі prices.
Якщо price expensive, додаємо його в expensive_prices.
Виводимо new list.
Це ще один дуже поширений pattern.
Loop.
Check.
Append.
Вітаю.
Ти вже робиш real data processing.
Small data.
Але real.
Типова помилка: index out of range
Це неправильно:
products = ["Keyboard", "Mouse", "Notebook"]
print(products[3])
Python дає error:
IndexError
Чому?
Бо list має 3 items.
Їх indexes:
0
1
2
Index 3 не існує.
Пам’ятай:
products[0] # first item
products[1] # second item
products[2] # third item
Останній index:
length - 1
Якщо list має 3 items, останній index — 2.
Python не жорстокий.
Він просто знову рахує з нуля.
Класичний Python.
Типова помилка: забути quotes
Неправильно:
products = [Keyboard, Mouse, Notebook]
Python думає, що Keyboard, Mouse і Notebook — це variable names.
Але вони не defined.
Правильно:
products = ["Keyboard", "Mouse", "Notebook"]
Strings потребують quotes.
Variables — ні.
Це правило повертається знову і знову.
Як bug, який ти думав, що вже виправив.
Але дружніший.
Типова помилка: неправильно використовувати append()
Неправильно:
products = ["Keyboard"]
products.append("Mouse", "Notebook")
Це дає error.
Чому?
Бо append() додає один item за раз.
Правильно:
products = ["Keyboard"]
products.append("Mouse")
products.append("Notebook")
Output:
['Keyboard', 'Mouse', 'Notebook']
Поки що запам’ятай:
append() додає один item.
Пізніше ти вивчиш інші способи додавати багато items.
Python має більше tools.
Звісно має.
Toolbox ніколи не закінчується.
Типова помилка: видалення missing items
Неправильно:
products = ["Keyboard", "Mouse"]
products.remove("Notebook")
Це викликає:
ValueError
Бо "Notebook" немає в list.
Безпечніше:
products = ["Keyboard", "Mouse"]
if "Notebook" in products:
products.remove("Notebook")
else:
print("Notebook was not found.")
Завжди будь обережним, коли видаляєш items.
Lists не можуть магічно видалити те, чого там немає.
Це вже була б філософська проблема.
А Python не в настрої.
Типова помилка: плутати index і value
Подивись на цей list:
products = ["Keyboard", "Mouse", "Notebook"]
Indexes:
0, 1, 2
Values:
Keyboard, Mouse, Notebook
Це отримує item за index:
print(products[1])
Output:
Mouse
Це видаляє за value:
products.remove("Mouse")
Важлива різниця:
index = position
value = actual item
Не плутай їх.
Index — це де річ знаходиться.
Value — це сама річ.
Дуже просто.
Дуже легко забути.
Дуже нормально для початківців.
Міні-програма: shopping list
Створи файл:
shopping_list.py
Напиши:
shopping_list = []
while True:
item = input("Add item or type q to quit: ")
if item == "q":
break
shopping_list.append(item)
print("Your shopping list:")
for item in shopping_list:
print(f"- {item}")
Приклад:
Add item or type q to quit: Bread
Add item or type q to quit: Milk
Add item or type q to quit: Eggs
Add item or type q to quit: q
Output:
Your shopping list:
- Bread
- Milk
- Eggs
Ця програма використовує:
- empty list;
while True;input();break;append();forloop.
Багато concepts разом.
Дуже сильна практика.
Дуже реально.
Дуже корисно, якщо ти потім справді згадаєш купити eggs.
Міні-програма: average score
Створи файл:
average_score.py
Напиши:
scores = []
score_count = int(input("How many scores? "))
for number in range(1, score_count + 1):
score = float(input(f"Score {number}: "))
scores.append(score)
total = 0
for score in scores:
total += score
average = total / len(scores)
print(f"Average score: {average:.2f}")
Приклад:
How many scores? 3
Score 1: 80
Score 2: 90
Score 3: 70
Output:
Average score: 80.00
Ця програма використовує:
- list creation;
- user input;
- numeric conversion;
append();- loop through list;
- total calculation;
len();- average calculation.
Це серйозна beginner program.
Не величезна.
Але серйозна.
Python-суп знову стає насиченішим.
Досі без USB-смаку.
Добре.
Міні-програма: product prices
Створи файл:
product_prices.py
Напиши:
prices = []
product_count = int(input("How many products? "))
for number in range(1, product_count + 1):
price = float(input(f"Price for product {number}: "))
prices.append(price)
total = 0
for price in prices:
total += price
print(f"Total: {total:.2f}")
if total >= 100:
print("Big order.")
else:
print("Small order.")
Приклад:
How many products? 3
Price for product 1: 20
Price for product 2: 30
Price for product 3: 60
Output:
Total: 110.00
Big order.
Тепер ми поєднуємо:
lists
loops
conditions
numbers
input
formatted output
Так будуються real programs.
Concept by concept.
Line by line.
Маленька цеглина.
Маленька цеглина.
Зрештою з’являється будинок.
Сподіваємось, не з привидами indentation errors.
Практика
Створи файл:
practice_lists.py
Напиши програму, яка:
- створює empty list called
names; - питає користувача, скільки names ввести;
- зберігає кожне name у list;
- виводить усі names;
- виводить, скільки names було додано;
- перевіряє, чи
"Anna"є у list.
Приклад рішення:
names = []
name_count = int(input("How many names? "))
for number in range(1, name_count + 1):
name = input(f"Name {number}: ")
names.append(name)
print("Names:")
for name in names:
print(f"- {name}")
print(f"Total names: {len(names)}")
if "Anna" in names:
print("Anna is in the list.")
else:
print("Anna is not in the list.")
Спробуй.
Зміни names.
Спробуй додати Anna.
Спробуй не додавати Anna.
Програма має реагувати по-різному.
Lists плюс conditions.
Дуже корисно.
Дуже реально.
Міні-завдання
Створи файл:
task_manager.py
Твоя програма має:
- почати з empty list called
tasks; - постійно показувати menu;
- дозволити користувачу додати task;
- дозволити користувачу показати всі tasks;
- дозволити користувачу вийти.
Menu:
1. Add task
2. Show tasks
q. Quit
Приклад рішення:
tasks = []
while True:
print("----- Task Manager -----")
print("1. Add task")
print("2. Show tasks")
print("q. Quit")
choice = input("Choose an option: ").lower()
if choice == "1":
task = input("Task: ")
tasks.append(task)
print("Task added.")
elif choice == "2":
print("Tasks:")
if len(tasks) == 0:
print("No tasks yet.")
else:
for task in tasks:
print(f"- {task}")
elif choice == "q":
print("Goodbye.")
break
else:
print("Unknown option.")
Це справжня mini application.
Вона використовує:
- lists;
- loops;
- conditions;
- input;
append();len();break.
Маленький project.
Великий progress.
Так починаються command-line tools.
Перед тим, як стати web apps.
Перед тим, як стати dashboards.
Перед тим, як хтось скаже:
Can we add login?
І adventure стає довшою.
Extra challenge: remove tasks
Покращ task_manager.py.
Додай ще одну menu option:
3. Remove task
Потім дозволь користувачу ввести task name і видалити його.
Приклад ідеї:
elif choice == "3":
task = input("Task to remove: ")
if task in tasks:
tasks.remove(task)
print("Task removed.")
else:
print("Task not found.")
Це додає:
- checking with
in; - removing with
remove(); - safer list updates.
Тепер твій task manager може додавати, показувати і видаляти tasks.
Все ще маленький.
Але дуже корисний.
Маленька productivity app.
Спробуй не витратити три години на її покращення.
Або витрать.
Так теж народжуються programmers.
Checklist для початківців
Коли твоя list-програма не працює, перевір:
Я використав square brackets для list?
Я розділив items commas?
Я поставив strings у quotes?
Я пам’ятаю, що indexes починаються з 0?
Я не намагаюсь отримати index, якого не існує?
Я використав append() з одним item?
Я перевірив, чи item існує перед remove()?
Я правильно зробив indentation у loop body?
Я використав len(), коли треба було number of items?
Я не сплутав index і value?
Lists спочатку прості.
Потім стають дуже потужними.
Більшість beginner list errors приходять від indexes.
Indexes починаються з нуля.
Перший item — index 0.
Останній item часто:
list_name[-1]
Запам’ятай це.
Твій майбутній debugging time скаже тобі дякую.
Напевно мовчки.
Підсумок
Сьогодні ти вивчив:
- lists зберігають багато values в одній variable;
- lists використовують square brackets;
- list items розділяються commas;
- indexes починаються з 0;
- negative indexes рахують з кінця;
- list items можна оновлювати;
append()додає item у кінець;remove()видаляє item за value;inперевіряє, чи item існує;not inперевіряє, чи item відсутній;len()повертає number of items;- lists дуже добре працюють з loops;
- lists можуть зберігати strings, numbers, booleans і більше;
- empty lists корисні, коли треба додати data пізніше;
- loops можуть build, read, filter і process lists.
Це величезний крок.
Тепер твої програми можуть зберігати багато values.
Вони можуть process collections of data.
Можуть будувати shopping lists.
Можуть рахувати totals.
Можуть manage tasks.
Можуть працювати з many inputs.
Це набагато ближче до real programming.
One value is nice.
Many values are reality.
Наступна лекція
У наступній лекції ми вивчимо dictionaries.
Dictionaries дозволяють зберігати data через keys і values.
Замість того, щоб зберігати тільки:
["Anna", 25, "Rome"]
ти зможеш писати:
user = {
"name": "Anna",
"age": 25,
"city": "Rome"
}
Це дуже важливо.
Lists чудові для many values.
Dictionaries чудові для structured data.
А structured data всюди.
Users.
Products.
Orders.
Profiles.
APIs.
Дуже корисно.
Дуже Python.