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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

if i > 100: break

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

 

27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

 

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95


 


96 97 98 99 100 101

 

Функция itertools.cycle()

 

Можно бесконечно повторять и некоторую последовательность(или значения другого итератора)с помощью функции cycle():

 

tango = [1, 2, 3]

 

for i in itertools.cycle(tango): print i,

 

1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2

 

3 1 2 3 1

 

2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3

 

1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 . . .

 

Функции 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

 

Функции itertools.takewhile() и itertools.dropwhile()



Некоторую новизну вносит другой вид фильтра:takewhile() и его"отрицательный"аналог dropwhile().Следующий пример поясняет их принцип действия:

 

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

 

print

 

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

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 60; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.)