map()是一个 Python 内建函数,它允许你不需要使用循环就可以编写简洁的代码。其基本核心是允许你使用一个函数转换整个可迭代对象的函数。在此之前我们需要简单了解函数和可迭代对象具体指什么。
1.函数: 实现特定功能的代码段,能够增强应用的模块性并且提高代码的重复利用率。
如:print()
、input()
、type()
等。
2.迭代对象: 迭代(遍历)就是按照某种顺序逐个访问对象中的每一项。Python中有很多对象都是可以通过for语句来直接遍历的,例如list
、string
、dict
等,这些对象都是可迭代的,被称为可迭代对象。
我们可以将可迭代对象想象成一个容器,里面存放了有限个元素,并且每个元素都可以从中获取出来。那么这个容器就是可迭代的,这个容器就是可迭代对象。
map()函数的基本形式:
map(function, iterable, ...)
参数:
function - 针对每一个迭代调用的函数。
iterable - 支持迭代的一个或者多个对象。在 Python 中大部分内建对象,例如 lists, dictionaries, 和 tuples 都是可迭代的。
在 Python 3 中,map()返回一个与传入可迭代对象大小一样的 map 对象。在 Python 2中,这个函数返回一个列表 list。
首先,我们先来看看用for循环
来实现map函数
的基本功能,假如我们有一个字符串列表,我们想要将每一个元素都转换整型类型。
list_of_strings = ["1","2","3","4","5"]
list_of_strings = ["1", "2", "3", "4", "5"]
list_int = []
for string in list_of_strings:
list_int.append(int(string))
print(list_int)
运行结果:
[1, 2, 3, 4, 5]
其基本思想先将字符型的列表通过for循环遍历出来,然后将遍历出来的字符转化为整型,再通过append()
函数追加到一个空列表中。
map() 函数
,代码将会非常简单,非常灵活。list_of_strings = ["1", "2", "3", "4", "5"]
list_int=map(int,list_of_strings) #创建一个变量来存储我们想要转换为数字的字符串列表
print(list_int) #map函数返回的是map object对象
#使用list进行了转换
print(list(list_int)) #接收我们新转换的可迭代项,并告诉计算机这些项是列表的一部分
运行结果:
<map object at 0x000001EE5E6BA700>
[1, 2, 3, 4, 5]
示例:
(1)将字符串列表中每一个元素都转换成大写字母。
def to_upper_case(s):
return s.upper() #函数化
result = ["python", "c", "java", "php"]
directions_upper = map(to_upper_case, result)
print(list(directions_upper)) #使用list()函数,来将返回的 map 转换成 list 列表
运行结果:
['PYTHON', 'C', 'JAVA', 'PHP']
(2)如果函数很简单,可以使用 lambda 函数:
result = ["python", "c", "java", "php"]
directions_upper = map(lambda s: s.upper(), result)
print(list(directions_upper))
运行结果:
['PYTHON', 'C', 'JAVA', 'PHP']
lambda 函数是一个匿名函数,与def 函数名 ()
的功能相同,例如创建一个列表,从1到10。
alist = map(lambda n: n*n , range(1, 11))
print(list(alist))
运行结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
对列表上的元素对应求和:
def sum_num(x, y):
return x + y
a = [1, 4, 6]
b = [2, 3, 5]
result = map(sum_num, a, b)
print(list(result))
运行结果:
[3, 7, 11]
使用 lambda 函数:
a = [1, 4, 6]
b = [2, 3, 5]
result = map(lambda x, y: x+y, a, b)
print(list(result))
运行结果:
[3, 7, 11]
当可迭代对象的长度不相同时:
a = [1, 4, 6, 7, 8]
b = [2, 3, 5]
result = map(lambda x, y: x+y, a, b)
print(list(result))
运行结果:
[3, 7, 11]
超过的元素 (7 , 8 )被忽略了。
map() 函数
不是使用for循环遍历字符串列表的每个项,而是将整个字符串列表转换为数字列表。所以节省了内存,并且代码运行得更快。