Списки в Python: работа с набором данных
Учимся хранить и обрабатывать целые наборы данных с помощью списков — одного из самых полезных инструментов Python.
Список — это упорядоченный набор значений, хранящийся в одной переменной. По сути, коробка, в которой лежит много элементов по порядку.
Одна переменная — много значений
Раньше в каждой переменной лежало одно значение. Но что, если нужно хранить оценки за месяц, или температуру за неделю, или имена всех одноклассников? Заводить тридцать переменных? Неудобно. На помощь приходит список — он держит сколько угодно значений в одной переменной, по порядку.
Список похож на пронумерованный ряд ящиков камеры хранения: все стоят в ряд, у каждого свой номер, и в каждом что-то лежит.
Как создать список
Список записывают в квадратных скобках, элементы разделяют запятыми.
ocenki = [5, 4, 5, 3, 4]
imena = ["Аня", "Боря", "Вера"]
print("Оценки:", ocenki)
print("Имена:", imena)
print("Сколько оценок:", len(ocenki))
Вывод:
Оценки: [5, 4, 5, 3, 4] Имена: ['Аня', 'Боря', 'Вера'] Сколько оценок: 5
Функция len (от length — «длина») говорит, сколько элементов в списке. В ocenki их пять.
Доступ по индексу
К каждому элементу можно обратиться по его номеру — индексу. Тут важнейшая особенность: нумерация начинается с нуля! Первый элемент имеет индекс 0, второй — 1, и так далее.
imena = ["Аня", "Боря", "Вера"]
print("Первый:", imena[0])
print("Второй:", imena[1])
print("Последний:", imena[-1]) # -1 это последний
Вывод:
Первый: Аня Второй: Боря Последний: Вера
Заметь хитрость: индекс -1 — это последний элемент, -2 — предпоследний. Удобно, когда не хочешь считать длину. А вот если попросить imena[5] там, где всего 3 элемента, Python выдаст ошибку — индекс за пределами списка.
Список можно менять
В отличие от строки, список легко изменять: добавлять элементы, заменять, удалять.
ochered = ["Аня", "Боря"]
ochered.append("Вера") # добавить в конец
print("После добавления:", ochered)
ochered[0] = "Андрей" # заменить первый
print("После замены:", ochered)
Вывод:
После добавления: ['Аня', 'Боря', 'Вера'] После замены: ['Андрей', 'Боря', 'Вера']
Метод append добавляет элемент в конец списка — как занять очередь последним. Это самый частый способ наполнять список данными.
Перебор списка циклом
Списки и циклы — лучшие друзья. Цикл for умеет проходить по списку и брать каждый элемент по очереди — без всяких индексов.
ocenki = [5, 4, 5, 3, 4]
for ocenka in ocenki:
print("Получена оценка:", ocenka)
Вывод:
Получена оценка: 5 Получена оценка: 4 Получена оценка: 5 Получена оценка: 3 Получена оценка: 4
Списки списков: таблицы данных
В список можно класть не только числа и строки, но и… другие списки! Так получается список списков — удобный способ хранить таблицы. Представь дневник: для каждого ученика — список его оценок, а все ученики — список таких списков. Звучит запутанно, но на деле очень логично: чтобы добраться до оценки, указываешь сначала номер ученика, потом номер оценки. Например, klass[0][1] — это вторая оценка первого ученика (помним: счёт с нуля). Так в программах хранят расписания, игровые поля (вспомни «крестики-нолики» или «морской бой» — это таблица клеток), результаты соревнований. Электронные таблицы, о которых пойдёт речь в следующем уроке, по сути устроены так же — как сетка из строк и столбцов. Не пугайся вложенности: это просто «список, элементы которого тоже списки», и обращаются к ним по двум индексам подряд.
Готовые функции для чисел
Для списков чисел в Python есть удобные встроенные функции, которые экономят кучу кода:
| Функция | Что делает |
len(s) | количество элементов |
sum(s) | сумма всех чисел |
max(s) | наибольшее |
min(s) | наименьшее |
sorted(s) | отсортированный список |
Попробуй сам
Обработаем оценки за месяц: посчитаем средний балл, найдём лучшую и худшую оценку и отсортируем. Раньше на это ушёл бы десяток строк, а с готовыми функциями — пара.
ocenki = [5, 4, 5, 3, 4, 2, 5]
print("Все оценки:", ocenki)
print("Всего оценок:", len(ocenki))
print("Сумма баллов:", sum(ocenki))
print("Средний балл:", sum(ocenki) / len(ocenki))
print("Лучшая оценка:", max(ocenki))
print("Худшая оценка:", min(ocenki))
print("По возрастанию:", sorted(ocenki))
# Посчитаем, сколько пятёрок
pyateroki = 0
for o in ocenki:
if o == 5:
pyateroki = pyateroki + 1
print("Пятёрок:", pyateroki)
Вывод:
Все оценки: [5, 4, 5, 3, 4, 2, 5] Всего оценок: 7 Сумма баллов: 28 Средний балл: 4.0 Лучшая оценка: 5 Худшая оценка: 2 По возрастанию: [2, 3, 4, 4, 5, 5, 5] Пятёрок: 3
Добавь свои оценки в список — все расчёты обновятся сами. Попробуй заменить условие o == 5 на o == 2, чтобы посчитать двойки. Видишь, как список плюс цикл плюс ветвление вместе решают настоящую задачу обработки данных?
Задача: отбор и преобразование данных
Часто из набора данных нужно отобрать только подходящие или преобразовать каждый элемент. Покажем оба приёма на оценках: отберём только хорошие (4 и 5) и заодно посчитаем, сколько процентов оценок «хорошие». Это уже настоящий мини-анализ данных, какой делают, например, при подведении итогов четверти.
ocenki = [5, 3, 4, 2, 5, 4, 3, 5, 4, 2]
# Отбираем только хорошие оценки (4 и 5)
horoshie = []
for o in ocenki:
if o >= 4:
horoshie.append(o)
print("Все оценки:", ocenki)
print("Хорошие оценки:", horoshie)
print("Хороших:", len(horoshie), "из", len(ocenki))
dolya = len(horoshie) / len(ocenki) * 100
print("Это", dolya, "процентов")
Вывод:
Все оценки: [5, 3, 4, 2, 5, 4, 3, 5, 4, 2] Хорошие оценки: [5, 4, 5, 4, 5, 4] Хороших: 6 из 10 Это 60.0 процентов
Мы прошли по списку, отобрали в новый список horoshie только подходящие элементы, а потом посчитали их долю. Эта связка «новый пустой список + цикл + условие + append» — золотой стандарт обработки данных. Поменяй оценки или порог o >= 4 (например, отбери только пятёрки) и посмотри, как изменится результат. По сути, ты только что написал то, что делают большие программы анализа данных, — просто на маленьком масштабе.
Частые ошибки
- Начинать счёт элементов с единицы. Первый элемент имеет индекс 0, а не 1.
- Обращаться к несуществующему индексу.
spisok[10]в списке из 3 элементов — ошибка. - Путать
appendи присваивание.appendдобавляет в конец, не заменяя существующее. - Делить сумму на ноль для пустого списка. Средний балл пустого списка не посчитать.
Запомни
- Список — упорядоченный набор значений в квадратных скобках.
- Индексация с нуля;
-1— последний элемент. appendдобавляет в конец; элементы можно заменять по индексу.- Готовые функции:
len,sum,max,min,sorted.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.