Learnly
Python с нуля/Глава 6/Урок 1

Списки: зачем хранить много значений

Списки: зачем хранить много значений

До сих пор каждая переменная хранила одно значение. Но что если нужно хранить 100 имён пользователей? Создавать 100 переменных, безумие.

Аналогия: список, это нумерованный блокнот

Представь блокнот с пронумерованными страницами. На каждой странице можно написать что-то. Список в Python работает так же: это коллекция значений, где каждый элемент имеет свой номер (индекс).

Как создать список

# Пустой список
tasks = []

# Список с элементами
fruits = ["яблоко", "банан", "вишня"]
numbers = [1, 2, 3, 4, 5]
mixed = ["Алекс", 25, True]    # можно смешивать типы

Доступ к элементам

Индексы начинаются с нуля, не с единицы. Это сбивает с толку поначалу, но быстро привыкаешь:

fruits = ["яблоко", "банан", "вишня", "груша"]

print(fruits[0])    # яблоко  (первый)
print(fruits[1])    # банан   (второй)
print(fruits[-1])   # груша   (последний, отрицательные индексы с конца)
print(fruits[-2])   # вишня   (предпоследний)

Основные операции

tasks = ["купить хлеб", "позвонить врачу"]

# Добавить в конец
tasks.append("сделать зарядку")

# Узнать длину
print(len(tasks))   # 3

# Проверить наличие
print("купить хлеб" in tasks)   # True

# Удалить элемент
tasks.remove("позвонить врачу")

# Изменить элемент
tasks[0] = "купить молоко"

Перебор списка

users = ["Алекс", "Мария", "Дмитрий"]

for user in users:
    print(f"Привет, {user}!")

Это и есть главная сила списков вместе с циклами, автоматически обработать каждый элемент.

Срезы: взять часть списка

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(numbers[2:5])    # [2, 3, 4]  (с индекса 2 до 5, не включая 5)
print(numbers[:3])     # [0, 1, 2]  (первые 3)
print(numbers[7:])     # [7, 8, 9]  (с 7 до конца)
print(numbers[::2])    # [0, 2, 4, 6, 8]  (каждый второй)

List comprehension, создать список в одну строку

Вместо цикла для создания списка:

# Обычный способ
squares = []
for i in range(1, 6):
    squares.append(i ** 2)

# List comprehension, короче и читаемее
squares = [i ** 2 for i in range(1, 6)]
print(squares)   # [1, 4, 9, 16, 25]

💡 Главная мысль: Список, это коллекция значений под одним именем. Вместо десяти переменных user1, user2, user3..., один список users. Работай с ним через цикл.