5 апреля 2013 г.

Имитация функций zip и map



В данном посте будет рассказано о применении итераций для имитации функций zip и map.


Мы уже видели, как встроенные функции zip и map позволяют объединять итерируемые объекты и отображать на них функции соответственно. При  вызове с  несколькими аргументами  функция  map отображает  заданную функцию на  элементы,  взятые  из каждой последовательности, практически тем же способом, каким функция zip объединяет их:

>>> S1 = ‘abc’
>>> S2 = ‘xyz123’
>>> list(zip(S1, S2)) # zip объединяет элементы итерируемых объектов
[(‘a’, ‘x’), (‘b’, ‘y’), (‘c’, ‘z’)]


# zip объединяет элементы, усекая результирующую последовательность
# по длине кратчайшей исходной последовательности
>>> list(zip([-2, -1, 0, 1, 2]))   # Единственная последовательность: 
[(-2,), (-1,), (0,), (1,), (2,)]   # 1-мерные кортежи
>>> list(zip([1, 2, 3], [2, 3, 4, 5])) # N последовательностей: 
[(1, 2), (2, 3), (3, 4)]               # N-мерные кортежи
# map передает объединенные элементы последовательностей указанной функции, 
# усекая результирующую последовательность
# по длине кратчайшей исходной последовательности
>>> list(map(abs, [-2, -1, 0, 1, 2]))  # Единственная последовательность: 
[2, 1, 0, 1, 2]                        # 1-мерная функция
>>> list(map(pow, [1, 2, 3], [2, 3, 4, 5])) # N последовательностей: 
[1, 8, 81]                                  # N-мерная функция


Комментариев нет:

Отправить комментарий