MyTetra Share
Делитесь знаниями!
map
Время создания: 23.06.2017 10:16
Раздел: Python - Основы
Запись: xintrea/mytetra_db_mcold/master/base/14982021846difua8ut0/text.html на raw.githubusercontent.com

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

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

?

1

2

3

4

5

6

7

8

9

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:

?

1

2

3

4

5

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 также работает и с функциями созданными пользователем:

?

1

2

3

4

5

6

7

8

9

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 выражение:

?

1

2

3

4

5

6

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 может быть так же применена для нескольких списков, в таком случае функция-аргумент должна принимать количество аргументов, соответствующее количеству списков:

?

1

2

3

4

5

6

7

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]

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

?

1

2

3

4

5

6

7

l1 = [1,2,3]

l2 = [4,5]

 

new_list = list(map(lambda x,y:  + y, l1, l2))

 

print (new_list)

[5,7]


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования