← Back to course

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

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.

Що ти вивчиш

У цій лекції ти вивчиш:

До кінця цієї лекції твої програми зможуть працювати з 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

Ця програма використовує:

Багато 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

Ця програма використовує:

Це серйозна 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

Напиши програму, яка:

Приклад рішення:

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

Твоя програма має:

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.

Вона використовує:

Маленький 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.")

Це додає:

Тепер твій 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 скаже тобі дякую.

Напевно мовчки.

Підсумок

Сьогодні ти вивчив:

Це величезний крок.

Тепер твої програми можуть зберігати багато 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.