Списки в 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.
Проверьте себя
1. Какой индекс у первого элемента списка?
A1
B0
C-1
Dзависит от длины
2. Что делает метод append?
AУдаляет элемент
BДобавляет элемент в конец списка
CСортирует список
DСчитает сумму
3. Чему равно sum([2, 3, 5]) / len([2, 3, 5])?
A10
B3.33...
C3.0
DОшибке
4. Как получить последний элемент списка s?
As[0]
Bs[len]
Cs[-1]
Ds[last]

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект