Python функция map zip

Understanding map, filter, and zip in Python

The purpose of this article is to understand how Python built-in functions map(), filter(), and zip() work to make you more efficient with processing data in Python! I will go over how these functions work and provide use-cases with and without the functions to compare. It is important to understand how these functions work, but there is a better way once you’re finished reading this! Its called Comprehensions and I write about them in Beginner Python Comprehensions

Map

Python’s map() function is used to apply a function on all elements of a specified iterable and return a map object.

map() will take 2 required positional arguments. 1.) A function to run against iterables. 2.) An iterable (ie. list).

The expected output of this would be a map object with a memory position. Lets take an example that applies the function square() to a list of integers. The objective here is to get a list of squared numbers from our original numbers list.

def square(number): return number*number 

Without map()

def square(number): return number*number numbers = [1,2,3,4,5] squared_numbers = [] for number in numbers: squared = square(number) squared_numbers.append(squared) 

With map()

def square(number): return number*number numbers = [1,2,3,4,5] squared_numbers = map(square, numbers) 

What we observed:

  • Using map() we don’t need to create an empty list that we append to in a for loop.
  • We do not need to use square() with parenthesis as the function parameter, as map() will call the function for us, we just pass the function object.
  • map() will run square() for each item in numbers .
Читайте также:  Python threading join timeout

Filter

Python’s filter() function checks a condition of each element in an iterable and returns a filtered data structure only containing elements who match the given conditions.

filter() will take 2 required positional arguments. 1.) A function to run against iterables. 2.) An iterable (ie. list).

The function passed to filter() must return a boolean ( True or False )

The expected output of this would be a filter object with a memory position.

Lets take an example that applies the function even() to a list of integers. The objective here is to get a list that only contains even numbers.

def even(number): if (number % 2) == 0: return True return False 

Without filter()

def even(number): if (number % 2) == 0: return True return False numbers = [1,2,3,4,5] even_numbers = [] for number in numbers: if even(number): even_numbers.append(number) 

With filter()

def even(number): if (number % 2) == 0: return True return False numbers = [1,2,3,4,5] even_numbers = filter(even, numbers) 

What we observed:

  • Using filter() we don’t need to create an empty list that we append to in a for loop.
  • We do not need to use even() with parenthesis as the function parameter, as filter() will call the function for us, we just pass the function object.
  • filter() will run even() for each item in numbers and remove all elements that returned False .

Zip

Python’s zip() function combines elements of 2 lists with matching indexes into an interable of tuples.

zip() will take an undefined number of arguments where each argument is an iterable to zip.

The expected output of this would be a zip object containing tuples of the same-index element of each iterable with a memory position..

Let’s take the above 2 examples combined to create a list of even numbers with their respective squared results.

def even(number): if (number % 2) == 0: return True return False def square(number): return number*number numbers = [1,2,3,4,5] even_numbers = filter(even, numbers) even_numbers_squared = map(square, even_numbers) 

Without zip()

. even_numbers = [2,4] even_numbers_squared = [4, 8] combined = [] even_numbers_index = 0 for number in even_numbers: squared = even_numbers_squared[even_numbers_index] squared_tuple = (number, squared) combined.append(squared_tuple) 

With zip()

. even_numbers = [2,4] even_numbers_squared = [4, 8] zipped_result = zip(even_numbers, even_numbers_squared) 

What we observed:

  • Using zip() we can combine values with matching indexes from multiple lists without creating a buffer list or iterating with a for loop.

Conclusion

So hopefully with this you have a basic grasp on how these functions work, why they’re useful, and how they can help you write more efficient and more readable Python code!

It is important to understand how these functions work, but there is a better way once you’re finished reading this! Its called Comprehensions and I write about them in Beginner Python Comprehensions

Источник

Python функция map zip

Don’t learn to code. Code to learn!

  • Python — Обзор
  • Основы синтаксиса Python
  • Операторы в Python
  • Типы данных в Python
  • Условные конструкторы в Python
  • Циклы в Python
  • Функции в Python
  • Функциональное программирование в Python
  • ООП в Python
  • Модули в Python
  • Работа с файлами в Python
  • Обработка исключительных ситуаций в Python

Функциональным называется такой подход к процессу программирования, в программа рассматривается как вычисление математических функций, при этом не используются состояния и изменяемые объекты. Как правило, когда говорят о элементах функционального программировании в Python, то подразумеваются следующие функции: lambda, map, filter, reduce, zip.

Lambda выражение в Python:

lambda оператор или lambda функция в Python это способ создать анонимную функцию, то есть функцию без имени. Такие функции можно назвать одноразовыми, они используются только при создании. Как правило, lambda функции используются в комбинации с функциями filter, map, reduce.

Синтаксис lambda выражения в Python

lambda arguments: expression

В качестве arguments передается список аргументов, разделенных запятой, после чего над переданными аргументами выполняется expression. Если присвоить lambda-функцию переменной, то получим поведение как в обычной функции (делаем мы это исключительно в целях демонстрации)

>>> multiply = lambda x,y: x * y >>> multiply(21, 2) 42

Но, конечно же, все преимущества lambda-выражений мы получаем, используя lambda в связке с другими функциями

Функция map() в Python:

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

old_list = ['1', '2', '3', '4', '5', '6', '7'] new_list = [] for item in old_list: new_list.append(int(item)) print (new_list) [1, 2, 3, 4, 5, 6, 7]

Тот же эффект мы можем получить, применив функцию map:

old_list = ['1', '2', '3', '4', '5', '6', '7'] new_list = list(map(int, old_list)) print (new_list) [1, 2, 3, 4, 5, 6, 7]

Как видите такой способ занимает меньше строк, более читабелен и выполняется быстрее. map также работает и с функциями созданными пользователем:

def miles_to_kilometers(num_miles): """ Converts miles to the kilometers """ return num_miles * 1.6 mile_distances = [1.0, 6.5, 17.4, 2.4, 9] kilometer_distances = list(map(miles_to_kilometers, mile_distances)) print (kilometer_distances) [1.6, 10.4, 27.84, 3.84, 14.4]

А теперь то же самое, только используя lambda выражение:

mile_distances = [1.0, 6.5, 17.4, 2.4, 9] kilometer_distances = list(map(lambda x: x * 1.6, mile_distances)) print (kilometer_distances) [1.6, 10.4, 27.84, 3.84, 14.4]

Функция map может быть так же применена для нескольких списков, в таком случае функция-аргумент должна принимать количество аргументов, соответствующее количеству списков:

l1 = [1,2,3] l2 = [4,5,6] new_list = list(map(lambda x,y: x + y, l1, l2)) print (new_list) [5, 7, 9]

Если же количество элементов в списках совпадать не будет, то выполнение закончится на минимальном списке:

l1 = [1,2,3] l2 = [4,5] new_list = list(map(lambda x,y: + y, l1, l2)) print (new_list) [5,7]

Функция filter() в Python:

Функция filter предлагает элегантный вариант фильтрации элементов последовательности. Принимает в качестве аргументов функцию и последовательность, которую необходимо отфильтровать:

mixed = ['мак', 'просо', 'мак', 'мак', 'просо', 'мак', 'просо', 'просо', 'просо', 'мак'] zolushka = list(filter(lambda x: x == 'мак', mixed)) print (zolushka) ['мак', 'мак', 'мак', 'мак', 'мак']

Обратите внимание, что функция, передаваемая в filter должна возвращать значение True / False, чтобы элементы корректно отфильтровались.

Функция reduce() в Python:

Функция reduce принимает 2 аргумента: функцию и последовательность. reduce() последовательно применяет функцию-аргумент к элементам списка, возвращает единичное значение. Обратите внимание в Python 2.x функция reduce доступна как встроенная, в то время, как в Python 3 она была перемещена в модуль functools.

Вычисление суммы всех элементов списка при помощи reduce:

from functools import reduce items = [1,2,3,4,5] sum_all = reduce(lambda x,y: x + y, items) print (sum_all) 15

Вычисление наибольшего элемента в списке при помощи reduce:

from functools import reduce items = [1, 24, 17, 14, 9, 32, 2] all_max = reduce(lambda a,b: a if (a > b) else b, items) print (all_max) 32

Функция zip() в Python:

Функция zip объединяет в кортежи элементы из последовательностей переданных в качестве аргументов.

a = [1,2,3] b = "xyz" c = (None, True) res = list(zip(a, b, c)) print (res) [(1, 'x', None), (2, 'y', True)]

Обратите внимание, что zip прекращает выполнение, как только достигнут конец самого короткого списка.

Источник

Оцените статью