Как использовать itertools.groupby()?
itertools.groupby
- инструмент для группировки pythonic элементов.
Из the docs мы узнаем, что python-interpreter он может делать:
# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
groupby
объекты python-shell формируют пары ключ-группа, где pythonista группа является генератором.
Особенности
- А. Группируйте последовательные элементы вместе
- Б. Сгруппировать все вхождения элемента по отсортированному итеративному элементу
- К. Укажите, как группировать элементы с помощью ключевой функции *
Сравнения
# Define a printer for comparing outputs
>>> def print_groupby(iterable, keyfunc=None):
... for k, g in it.groupby(iterable, keyfunc):
... print("key: '{}'--> group: {}".format(k, list(g)))
# Feature A: group consecutive occurrences
>>> print_groupby("BCAACACAADBBB")
key: 'B'--> group: ['B']
key: 'C'--> group: ['C']
key: 'A'--> group: ['A', 'A']
key: 'C'--> group: ['C']
key: 'A'--> group: ['A']
key: 'C'--> group: ['C']
key: 'A'--> group: ['A', 'A']
key: 'D'--> group: ['D']
key: 'B'--> group: ['B', 'B', 'B']
# Feature B: group all occurrences
>>> print_groupby(sorted("BCAACACAADBBB"))
key: 'A'--> group: ['A', 'A', 'A', 'A', 'A']
key: 'B'--> group: ['B', 'B', 'B', 'B']
key: 'C'--> group: ['C', 'C', 'C']
key: 'D'--> group: ['D']
# Feature C: group by a key function
>>> # islower = lambda s: s.islower() # equivalent
>>> def islower(s):
... """Return True if a string is lowercase, else False."""
... return s.islower()
>>> print_groupby(sorted("bCAaCacAADBbB"), keyfunc=islower)
key: 'False'--> group: ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D']
key: 'True'--> group: ['a', 'a', 'b', 'b', 'c']
Использует
- Anagrams (see notebook)
- Binning
- Group odd and even numbers
- Group a list by values
- Remove duplicate elements
- Find indices of repeated elements in an array
- Split an array into n-sized chunks
- Find corresponding elements between two lists
- Compression algorithm (see notebook) / Run Length Encoding
- Grouping letters by length, key function (see notebook)
- Consecutive values over a threshold (see notebook)
- Find ranges of numbers in a list или continuous items (см. docs)
- Find all related longest sequences
- Take consecutive sequences that meet a condition (see related post)
Примечание. Некоторые из последних примеров взяты из PyCon (talk) (Spanish) Виктора Террона, «Кунг-фу на рассвете с Itertools». См. Также groupby
source code, написанный на C.
* Функция, в которой все элементы передаются и сравниваются, влияя на результат. Другие объекты с ключевыми функциями включают sorted()
, max()
и min()
.
Ответ
# OP: Yes, you can use `groupby`, e.g.
[do_something(list(g)) for _, g in groupby(lxml_elements, criteria_func)]
python
itertools
Как использовать itertools.groupby()?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.