Добавить в корзинуПозвонить
Найти в Дзене

Сопоставление, отбор и сокращение списков в Python

В прошлый раз мы разобрали, что такое списки и как с ними работать: создавать, добавлять элементы, удалять и перебирать. Теперь пойдём дальше. Вы узнаете три приёма, которые позволяют получать из имеющихся списков новые списки — изменённые, уменьшенные или отфильтрованные. Представьте, что у вас есть коробка с разными фруктами. Вы хотите: Рассмотрим каждый приём на примерах кода, понятных новичку. Что это такое
Сопоставление — это когда мы берём каждый элемент исходного списка, делаем с ним одно и то же действие, и кладём результат в новый список. Количество элементов не меняется — меняется их «содержимое». Простой способ – цикл
Допустим, у нас есть список температур в градусах Цельсия, а нам нужно получить такой же список в градусах Фаренгейта. Более краткий способ – генератор списка
В Python есть удобная сокращённая запись, которая делает то же самое за одну строку. celsius = [0, 10, 20, 30] farengeit = [t * 9/5 + 32 for t in celsius] print(farengeit) # [32.0, 50.0, 68.0, 86.0] Читае
Оглавление

В прошлый раз мы разобрали, что такое списки и как с ними работать: создавать, добавлять элементы, удалять и перебирать. Теперь пойдём дальше. Вы узнаете три приёма, которые позволяют получать из имеющихся списков новые списки — изменённые, уменьшенные или отфильтрованные.

Представьте, что у вас есть коробка с разными фруктами. Вы хотите:

  • Преобразовать каждый фрукт — например, наклеить на каждый ценник. Это сопоставление (в программировании его ещё иногда называют «отображение» или «проецирование», а также «мэппинг» — map).
  • Оставить только нужные фрукты — например, зелёные яблоки, а красные убрать. Это отбор (фильтрация — filter).
  • Собрать один общий результат из всего списка — например, общий вес всех фруктов. Это сокращение (свёртка, агрегация — reduce).

Рассмотрим каждый приём на примерах кода, понятных новичку.

Сопоставление (преобразование каждого элемента)

Что это такое
Сопоставление — это когда мы берём каждый элемент исходного списка, делаем с ним одно и то же действие, и кладём результат в новый список. Количество элементов не меняется — меняется их «содержимое».

Простой способ – цикл
Допустим, у нас есть список температур в градусах Цельсия, а нам нужно получить такой же список в градусах Фаренгейта.

Более краткий способ – генератор списка
В Python есть удобная сокращённая запись, которая делает то же самое за одну строку.

celsius = [0, 10, 20, 30]
farengeit = [t * 9/5 + 32 for t in celsius]
print(farengeit) # [32.0, 50.0, 68.0, 86.0]

Читается это так: «взять каждый элемент t из списка celsius, вычислить выражение и собрать результаты в новый список».

Другие примеры сопоставления:

  • Перевести имена в верхний регистр: [имя.upper() for имя in ["анна", "борис"]]
  • Вычислить квадраты чисел: [x**2 for x in [1, 2, 3]]
  • Перевести рубли в доллары: [round(рубль / 90, 2) for рубль in [100, 500, 1000]]

Главное правило сопоставления: на входе 5 элементов — на выходе тоже 5 элементов, но каждый изменён по заданному правилу.

Отбор (фильтрация)

Что это такое
Отбор — это когда мы выбираем из списка только те элементы, которые подходят под условие. Количество элементов в новом списке может быть меньше, чем в исходном, а может и совпадать (если подошли все).

Способ с циклом
Оставим из списка чисел только чётные.

-2

Краткая запись (тоже генератор списка, но с условием)
Условие дописывается в конец.

числа = [1, 2, 3, 4, 5, 6]
чётные = [число for число in числа if число % 2 == 0]
print(чётные) # [2, 4, 6]

Читается: «взять каждое число из списка числа, но только если оно чётное, и собрать в новый список».

Другие примеры отбора:

  • Оставить строки длиннее 3 символов: [слово for слово in ["кот", "собака", "дом"] if len(слово) > 3]
  • Оставить оценки выше тройки: [оценка for оценка in [2, 4, 5, 3, 2] if оценка > 3]
  • Оставить положительные числа: [x for x in [-5, 0, 3, -1, 8] if x > 0]

Отбор можно совмещать с сопоставлением в одном генераторе. Например, взять числа, оставить только положительные и сразу перевести их в строки:

исходные = [10, -3, 25, -7, 4]
результат = [str(число) for число in исходные if число > 0]
print(результат) # ['10', '25', '4']

Здесь сначала срабатывает отбор (if число > 0), затем сопоставление (str(число)).

Сокращение (получение одного значения из всего списка)

Что это такое
Сокращение — это когда из всего списка мы получаем один итоговый результат. Например, сумму всех чисел, самое большое слово, общую стоимость товаров.

Здесь уже не обойтись без цикла — краткой записи «в одну клетку» для любых сокращений нет, но для самых частых случаев в Python есть встроенные помощники.

Встроенные сокращатели
Для самых простых задач язык уже даёт готовые функции:

числа = [5, 12, 3, 8]
сумма = sum(числа) # 28
максимум = max(числа) # 12
минимум = min(числа) # 3
количество = len(числа) # 4

Ручное сокращение через цикл
Если нужно что-то нестандартное, пишем цикл. Например, соединим все строки списка в одну длинную строку:

-3

Другой пример — произведение всех чисел (для этого нет встроенной функции, но легко сделать самому):

-4

Ещё пример — найдём самое длинное слово:

-5

Какой приём когда использовать

  • Сопоставление — нужно изменить каждый элемент по одному правилу. (Исходный список остаётся неизменным, создаётся новый).
  • Отбор — нужно оставить только элементы, отвечающие условию.
  • Сокращение — нужно получить один итог: сумму, максимум, предложение из слов и так далее.

Важное замечание
Все эти приёмы не изменяют исходный список, а создают новый (или одно значение). Это безопасно — вы не испортите исходные данные. Если же вы хотите изменить сам исходный список, то лучше работать напрямую по индексам, как мы рассматривали в прошлой статье (через присваивание список[индекс] = новое_значение).

Заключение

Мы рассмотрели три ключевых действия над списками:

  1. Сопоставление — превращаем каждый элемент по формуле.
  2. Отбор — оставляем только подходящие.
  3. Сокращение — сворачиваем весь список в одно значение.

Теперь вы можете обрабатывать данные в Python гораздо гибче: чистить списки от мусора, преобразовывать форматы, подсчитывать итоги. Пробуйте писать небольшие примеры сами — это лучший способ закрепить навык.

Подписывайтесь на канал, чтобы не пропустить новые уроки по Python.