![]() |
![]() |
![]() |
|||||
![]() |
Итерируем правильно: 20 приемов использования в Python модуля itertools |
||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-01-04 11:36 Рассказываем с примерами кода о функциях модуля itertools – инструмента стандартной библиотеки Python, содержащего распространённые шаблоны итераторов. Бесконечные счётчики, сочетания и перестановки, итераторы среза и многое другое.
![]() В декабре 2019 года мы подробно рассказали о модуле collections. Другой важный компонент стандартной библиотеки – itertiools. Модуль itertools содержит строительные блоки итераторов, основанные на конструкциях из языков программирования APL, Haskell и SML. Ниже мы опишем набор быстрых и эффективных в отношении памяти инструментов, полезных как самостоятельно, так и в сочетании. Вместе они образуют «алгебру итераторов» для программ на чистом Python. Цель публикации – в сжатой форме рассмотреть распространённые примеры и шаблоны использования модуля itertools. Начнем с импорта: Чтобы лучше запомнить функции модуля, мы не станем использовать конструкцию Если вы владеете Jupyter Notebook, блокнот этой статьи доступен на GitHub. 1. Бесконечный счётчик Функция Пример использования итератора в Чтобы продолжить счёт при прерывании выполнения программы передайте последнее значение новому объекту итератора в виде параметра Если необходимо подсчитывать число вхождений элементов в список или кортеж, обратите внимание на 2. Упаковка по более длинной последовательности Если последовательности имеют неодинаковую длину, Но такое сокращение может быть неудобно из-за потери информации. Чтобы сохранить обе последовательности, используйте Вместо 3. Аккумулирующий итератор Суммирование нарастающим (накопительным) итогом – вид сложения последовательности чисел. Например, так считается квартальная прибыль Каждый элемент складывается с суммой всех предшествовавших элементов. В следующем примере 1 и 2 даёт 3, сумма 1, 2 и 3 равна 6 и т. д. Описанный тип работы с последовательностью воплощен в Чтобы вывести данные, мы используем список. При печати самого итератора выводится только его ссылка. По умолчанию к элементам применяется 4. Бесконечный итератор последовательности С помощью 5. Бесконечный итератор одного объекта Итератор, создаваемый Классический пример использования Все числа последовательности 6. Мапирование с распаковкой Раз мы заговорили о 7. Комбинаторика: сочетания Модуль Сочетания – выбранные из множества Например, мы хотим составить трёхцветный флаг из лент цветных тканей. Есть четыре цвета лент. Все варианты выбора тканей без учёта их расположения: Порядок следования не имеет значения, поэтому все тройки цветов уникальны. 8. Комбинаторика: перестановки Перестановки – те же сочетания, для которых важен порядок следования элементов. В продолжение предыдущего примера определим все варианты как мы можем составить флаг с учётом порядка следования цветов: Как и ожидалось, число комбинаций с учетом порядка элементов гораздо больше. 9. Комбинаторика: размещение с повторениями Размещение с повторениями (выборка с возвращением) – это комбинаторное размещение объектов, в котором каждый объект может участвовать в размещении несколько раз. ![]() Например, есть пин-код из четырех цифр. На каждой позиции стоит цифра от 10. Комбинаторика: размещение Рассмотрим также случай обычного размещения, когда элементы могут повторяться, но каждое сочетание встречается только один раз: 11. Декартово произведение множеств Метод Декартово (прямое) произведение – множество, элементами которого являются все возможные упорядоченные пары элементов исходных множеств. ![]() Например, найдём обозначения всех полей шахматной доски: 12. Цепочки итераторов Иногда необходимо использовать нескольков итераторов. И независимо, и цепочкой один за другим. Для объединения итераторов используйте ![]() Например, мы хотим использовать для отрисовки игральных карт независимые итераторы обозначений в углу поля карты: С помощью 13. Плоский список из вложенного Альтернативным конструктором Последний конструктор удобно использовать для объединения списков: 14. Итератор среза Срез – удобный инструмент списков, который доступен и для итераторов с помощью Например, нам достаточно читать из крупного файла только три первых строки: Функция 15. Фильтрация группы элементов Функция Метод 16. Фильтрация до последнего истинного (или с первого ложного) элемента Если необходимо отобрать объекты, стоящие после неудовлетворяющего условию элемента, используем Метод 17. Группировка по ключу ![]() Инструмент Обратите внимание, что группировка работает только со смежными объектами. Предварительно отсортируйте данные. 18. Репликация итераторов Функция Эти итераторы соответствуют одной последовательности, но независимы друг от друга. 19. Повторение последовательности заданное число раз Волшебная сила itertools – в умении комбинировать итераторы, чтобы писать быстрый, эффективный и ясный код. Например, сочетание 20. Уникальные элементы последовательности Напоследок напишем функцию, выводящую все уникальные элементы в том же порядке, как они появлялись в исходной последовательности. Опциональный аргумент – ссылка на функцию определения эквивалентов, представленных по-разному. Например, заглавных и строчных букв. Заключение Описывая приёмы использования itertools, мы попутно определили основные функции модуля. Итераторы полезны для обработки крупных файлов и потоков данных, для доступа к содержимому объектов без раскрытия их полного внутреннего представления. Модуль itertools обеспечивает ключевые структуры итераторов Python. Другие шаблоны вы найдёте в специальной библиотеке примеров Интересны ли вам такие обзоры инструментов Python? Будем рады узнать в комментариях. Источники Источник: proglib.io Комментарии: |
||||||