Identity function в Itertools.groupby
Читал документацию по python, а конкретно по функции groupby и наткнулся на такую фразу которую понять не в состоянии.
itertools.groupby(iterable, key=None) Make an iterator that returns consecutive keys and groups from the iterable. The key is a function computing a key value for each element.If not specified or is None, key defaults to an identity function and returns the element unchanged.
Объясните пожалуйста что такое identity function и что же происходит в функции groupby если ключ отсутствует? Было бы не плохо на каком нибудь примере.
Ответы (2 шт):
Identity function по-русски – тождественное отображение
Проще говоря, это функция, которая возвращает свой аргумент без изменений
def identity(x):
return x
Подобная функция есть, например, в библиотеке toolz, да и вообще в мире функционального программирования она очень востребована.
Вызов groupby без параметра key
itertools.groupby(iterable)
по результату будет совпадать со следующим вызовом
itertools.groupby(iterable, key=lambda x: x)
т.е. в качестве ключа группировки будет использован сам элемент последовательности, и в одну группу попадут только равные элементы, расположенные последовательно.
>>> [(k, g) for k, [*g] in itertools.groupby([1,2,2,1,3,3,3,1,1])]
[(1, [1]), (2, [2, 2]), (1, [1]), (3, [3, 3, 3]), (1, [1, 1])]
identity function - в данном случае функция, которая возвращает аргумент (операнд) не измененным. Если какая-то функция (в вашем случае - метод groupby) требует на вход ключ в виде функции, которая вычисляется для каждого члена итератора, то передать в нее просто, скажем, число, не получится.
Если вы передадите в groupby ключ равный None или вообще не передадите ключ, то фактически ключ будет вычисляться как-то так:
def identity_func(operand):
return operand
То есть, группируемый объект у вас останется неизмененным. О чем и говориться в документации.