#python python... PYTHON 🔛 🚀
11 subscribers
914 photos
7 videos
158 files
1.54K links
Download Telegram
Forwarded from Python Academy
Another yet itertools tricks

Всем привет! Не так давно мы рассматривали 3 трюка с модулем itertools. Сегодня мы рассмотрим еще несколько полезных фишек этого крутого модуля.

Начнем с функции combinations. Она позволяет составлять комбинации элементов из итерируемых объектов без повторений. Первый аргумент это сам объект, а второй – длина комбинации.

Для того, чтобы составить комбинацию с повторениями, используют функцию combinations_with_replacement. Делает она абсолютно все то же самое что и предыдущая, с одним исключением – теперь в комбинации могут быть повторы.

Ну и в заключение, рассмотрим функцию compress, применяющую "маску" из второго аргумента функции к первому. То есть, если в маске на этом месте стоит единица, то в исходном массиве цифра остается нетронутой, и наоборот.

#модули #itertools
Forwarded from Python Community
⚡️ Бесконечные итераторы

Продолжаем рассказывать про итераторы, а если быть конкретнее, про модуль itertools. itertools — модуль, хранящий в себе множество готовых итераторов, как, например, groupby.

count(start, step=1) — итератор, считающий от start, добавляя step до бесконечности. Он чем-то напоминает range, но без ограничений.

cycle(elems) — бесконечное количество раз возвращает элементы внутри elems по порядку.

repeat(elem, n) — возвращает n раз или бесконечно значение elem.

#миниурок #itertools
Forwarded from Python Community
⚡️ Продолжаем рассматривать модуль itertools

Думаю, стоит вам ещё рассказать про этот модуль и интересные функции. Начнём!

zip_longest(a, b, fill_value) — очень удобный итератор. Работает также как и zip, но если длина списков разная, заполняет их fill_value.

takewhile(func, seq) — возвращает значения из seq, пока func не вернёт False.

chain(a, b,...) — соединяет два и более итерируемых объектов в один.

product(a, b...) — декартово произведение итерируемых объектов.

#миниурок #itertools
На сегодня расскажу ещё пару рецептов с more_itertools.

1) map_if работает как обычный map, но применяет функцию на элемент только если оно попадает под условие. Например, вот так мы можем возвести в квадрат только те числа, которые делятся на 2 нацело:

example = [1, 2, 3, 4, 5, 6, 7, 8]
list(map_if(example, lambda x: x % 2 == 0, lambda x: x * x)) # [1, 4, 3, 16, 5, 36, 7, 64]


2) Получить последний элемент можно при помощи last. Возникает вопрос а зачем он существует, если можно указать sequence[-1]? Ответом является то, что last позволяет указать, что ему возвращать, если элементов в коллекции нет:

last([1, 2, 3]) # Очевидно получим 3 
last([], 0) # Список пустой, но получим 0
[][-1] # Получим IndexError


Ещё есть first - как понятно из названия, он получает первый элемент.

3) map_except тоже работает как map, но умеет игнорировать ошибки. Например, мы хотим получить только те элементы, которые получилось привести к целому числу:

example = [1, "1", "2", "test", "three", object, 4.0]
list(map_except(int, example, ValueError, TypeError)) # [1, 1, 2, 4]


4) Ну и в конце про take - он просто берет N элементов из итерируемого объекта:

example = range(10)
take(3, example) # [0, 1, 2]
take(20, example) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - если больше, возьмет доступные


#itertools #more_itertools #библиотека