Опубликован: 17.02.2024 95
В Python есть очень полезный и удобный инструмент группировки элементов итерируемой последовательности (функция itertools.groupby()
), аналогичный GROUPBY
в SQL.
Функция groupby()
из модуляitertools
используется для группировки последовательных элементов в итерируемом объекте на основе значения ключа, которое возвращается функцией-ключом. Это позволяет быстро и эффективно сгруппировать данные по определенному критерию.
Важно отметить, что groupby()
эффективно работает только с уже отсортированными по ключу данными (иначе, одинаковые ключи, разделенные другими ключами, будут рассматриваться как разные группы). Поэтому перед использованием groupby()
необходимо отсортировать данные с использованием той же ключевой функции.
Синтаксис: itertools.groupby(iterable, key=None)
iterable
- итерируемая последовательность, элементы которой необходимо сгруппировать;key
- функция, вычисляющая значение ключа группировки для каждого элемента последовательности (по умолчанию None
).Функция itertools.groupby
возвращает ключи и сгруппированные по ним итераторы. Если функция группировки key
не задана, тогда данные будут сгруппированы по критерию тождественности их значений. По умолчанию для key
используется функция lambda x: x
, которая возвращает сам элемент.
from itertools import groupby
# Пример группировки списка кортежей
organisms = [('land', 'lion'), ('aquatic', 'shark'), ('air', 'eagle'), ('land','bear'), ('land', 'monkey'), ('aquatic', 'octopus')]
key_func = lambda x: x[0] # функция группировки по первому элементу кортежа
for key, group in groupby(sorted(organisms, key=key_func), key_func):
print(f"{key}: { [i[1] for i in group] }")
# Результат группировки
air: ['eagle']
aquatic: ['shark', 'octopus']
land: ['lion', 'bear', 'monkey']
# Использование groupby() для поиска дубликатов в списке
list_num = [2, 3, 5, 2, 6, 5, 3, 5, 2, 2]
for key, group in groupby(sorted(list_num)):
print(f"{key} : {list(group)}")
2 : [2, 2, 2, 2]
3 : [3, 3]
5 : [5, 5, 5]
6 : [6]
Фильтрация элементов итератора с помощью bool-списка функции itertools.compress()
Пропуск не нужных элементов последовательности с помощью itertools.dropwhile()
Возвращение элементов списка пока условие истинно с помощью itertools.takewhile()
Бесконечные итераторы в Python itertools.count(), cycle(), repeat()
Комментариев нет.