Itertools — одна из самых интересных библиотек Python. Он содержит ряд функций, вдохновленных функциональными языками, которые используются для работы с итераторами.
В этой статье я упомяну некоторые из них, которые привлекли мое внимание больше всего и о которых стоит помнить, чтобы не изобретать велосипед каждый раз.
Несколько раз я реализовал бесконечный счетчик (ну, он заканчивается
явно в какой-то момент с перерывом), используя цикл while True. itertools предлагает нам лучшую альтернативу:
from itertools import count for i in count(start=2, step=2): if i > 10: break print(i)
2 4 6 8 10
Как видно из примера, если бы не разрыв, count возвращал бы бесконечные числа. Приведенный выше код примерно эквивалентен:
i = 2 while True: if i > 10: break print(i) i = 2
2 4 6 8 10
Функция, позволяющая делать что-то очень распространенное: получать данные из потока пакетами размера n. Давайте рассмотрим пример:
from itertools import batched sequence = [1, 2, 3, 4, 5, 6, 7] for batch in batched(sequence, 2): # lotes de tamaño 2 print(batch)
(1, 2) (3, 4) (5, 6) (7,)
Следует отметить, что размер последней партии может быть меньше или равен n, как в этом случае. Весьма полезно, вам не кажется?
Еще одна простая и полезная функция. Учитывая последовательность (фактически, учитывая итератор), она дает нам ее элементы парами.
Давайте рассмотрим это лучше на примере:
from itertools import pairwise sequence = [1, 2, 3, 4, 5, 6, 7] for a, b in pairwise(sequence): print(a, b)
1 2 2 3 3 4 4 5 5 6 6 7
Количество пар на единицу меньше размера входной последовательности.
Наконец, в этой короткой записи я хочу поговорить о продукте,
реализация декартова произведения.
Полезно заменить вложенный цикл for, проходящий через два потока данных:
from itertools import product A = [1, 2, 3] B = [5, 6, 7] for a, b in product(A, B): print(a, b)
1 5 1 6 1 7 2 5 2 6 2 7 3 5 3 6 3 7
Получает параметр, который позволяет нам получить декартово произведение
последовательность сама с собой:
from itertools import product A = [1, 2, 3] for a1, a2, a3 in product(A, repeat=3): print(a1, a2, a3)
1 1 1 1 1 2 1 1 3 1 2 1 1 2 2 1 2 3 1 3 1 1 3 2 1 3 3 2 1 1 2 1 2 2 1 3 2 2 1 2 2 2 2 2 3 2 3 1 2 3 2 2 3 3 3 1 1 3 1 2 3 1 3 3 2 1 3 2 2 3 2 3 3 3 1 3 3 2 3 3 3
В следующем посте я упомяну и другие функции этого полезного модуля
Стандартная библиотека Python. Надеюсь, это будет вам полезно.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3