Язык программирования Python




Функции itertools.imap(), itertools.starmap() и itertools.ifilter()


Аналогами map() и filter() в модуле itertools являются imap() и ifilter(). Отличие imap() от map() в том, что вместо значения от преждевременно завершившихся итераторов объект None не подставляется. Пример:

for i in map(lambda x, y: (x,y), [1,2], [1,2,3]): print i,

(1, 1) (2, 2) (None, 3)

from itertools import imap for i in imap(lambda x, y: (x,y), [1,2], [1,2,3]): print i,

(1, 1) (2, 2)

Здесь следует заметить, что обычная функция map() нормально воспринимает итераторы в любом сочетании с итерабельными (поддающимися итерациям) объектами:

for i in map(lambda x, y: (x,y), iter([1,2]), [1,2,3]): print i,

(1, 1) (2, 2) (None, 3)

Функция itertools.starmap() подобна itertools.imap(), но имеет всего два аргумента. Второй аргумент - последовательность кортежей, каждый кортеж которой задает набор параметров для функции (первого аргумента):

>>> from itertools import starmap >>> for i in starmap(lambda x, y: str(x) + y, [(1,'a'), (2,'b')]): ... print i, ... 1a 2b

Функция ifilter() работает как filter(). Кроме того, в модуле itertools есть функция ifilterfalse(), которая как бы добавляет отрицание к значению функции:

for i in ifilterfalse(lambda x: x > 0, [1, -2, 3, -3]): print i,

-2 -3




Содержание  Назад  Вперед