Проблема: Хочешь хранить 100 студентов → 100 переменных? Решение: коллекции.
Списки (Lists)
Список — упорядоченная последовательность элементов под одним именем.
Создание списков
empty_list = []
numbers = [1, 2, 3, 4, 5]
fruits = ["яблоко", "банан", "апельсин"]
mixed = ["текст", 42, True, 3.14]
Доступ по индексу
Индексы начинаются с 0!
fruits = ["яблоко", "банан", "апельсин"]
# 0 1 2
print(fruits[0]) # яблоко
print(fruits[-1]) # апельсин (последний)
print(fruits[-2]) # банан (предпоследний)
fruits[1] = "груша" # изменение
print(len(fruits)) # 3
Срезы (Slicing)
Синтаксис: список[start:end:step]
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[2:5]) # [2, 3, 4]
print(numbers[:5]) # [0, 1, 2, 3, 4]
print(numbers[5:]) # [5, 6, 7, 8, 9]
print(numbers[::2]) # [0, 2, 4, 6, 8]
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(numbers[-3:]) # [7, 8, 9]
Срезы создают новый список, оригинал не меняется.
Методы списков
fruits = ["яблоко", "банан"]
fruits.append("апельсин") # добавить в конец
fruits.insert(1, "груша") # вставить на позицию
fruits.remove("банан") # удалить по значению (первое вхождение)
last = fruits.pop() # удалить и вернуть последний
first = fruits.pop(0) # удалить и вернуть по индексу
fruits.clear() # очистить весь список
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort() # сортировать на месте → [1, 1, 2, 3, 4, 5, 9]
numbers.sort(reverse=True) # обратная сортировка
numbers.reverse() # перевернуть
print(numbers.count(1)) # 2 — количество вхождений
print(numbers.index(4)) # индекс элемента
list1 = [1, 2, 3]
list1.extend([4, 5, 6]) # добавить элементы из другого списка
Проверка наличия
if "банан" in fruits:
print("Есть!")
if "груша" not in fruits:
print("Нет груши")
Словари (Dictionaries)
Словарь — коллекция пар «ключ: значение». Доступ по ключу, а не по индексу.
Создание словарей
empty_dict = {}
student = {
"name": "Анна",
"age": 16,
"city": "Москва",
"grade": 10
}
# Ключи могут быть строками или числами
scores = {1: 100, 2: 85, 3: 92}
Доступ, изменение, добавление, удаление
print(student["name"]) # Анна
print(student["age"]) # 16
student["age"] = 17 # изменить
student["email"] = "a@mail.com" # добавить новый ключ
del student["email"] # удалить ключ
age = student.pop("age") # удалить и получить значение
Методы словарей
student = {"name": "Анна", "age": 16, "city": "Москва"}
# get() — безопасное получение (без KeyError)
email = student.get("email", "No email") # "No email"
age = student.get("age", 0) # 16
# keys(), values(), items()
print(list(student.keys())) # ['name', 'age', 'city']
print(list(student.values())) # ['Анна', 16, 'Москва']
# update() — обновить несколько ключей сразу
student.update({"age": 17, "grade": 11})
# Проверка наличия ключа
if "name" in student:
print("Имя есть!")
student.clear() # очистить словарь
Итерация
По списку
fruits = ["яблоко", "банан", "апельсин"]
for fruit in fruits:
print(fruit)
# С индексом (enumerate):
for i, fruit in enumerate(fruits, 1):
print(f"{i}. {fruit}")
# 1. яблоко
# 2. банан
# 3. апельсин
По словарю
student = {"name": "Анна", "age": 16, "city": "Москва"}
for key in student: # только ключи
print(key)
for value in student.values(): # только значения
print(value)
for key, value in student.items(): # ключи и значения
print(f"{key}: {value}")
Практический пример: TODO список
tasks = []
# Добавление задач
tasks.append("Учёба")
tasks.append("Спорт")
tasks.append("Чтение")
# Показ
print("Мои задачи:")
for i, task in enumerate(tasks, 1):
print(f"{i}. {task}")
# Удаление
tasks.remove("Спорт")
print(f"Осталось: {len(tasks)} задач")
# Проверка
if "Учёба" in tasks:
print("Учёба ещё не выполнена!")
Частые ошибки
1. IndexError — выход за границы:
fruits = ["яблоко", "банан"]
print(fruits[5]) # ❌ IndexError!
# Проверяй длину: if len(fruits) > 5: ...
2. KeyError — ключ не найден:
student = {"name": "Анна"}
print(student["age"]) # ❌ KeyError!
# Используй get(): student.get("age", 0)
3. Копирование списков:
# ❌ Это ссылка, не копия:
list2 = list1
list2[0] = 999
print(list1) # [999, ...] — изменился!
# ✅ Настоящая копия:
list2 = list1.copy() # или list1[:]
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!