Python map() 内置函数

来自 Python 3 文档

返回一个迭代器,它将函数应用于可迭代对象的每个项目,并产生结果。如果提供了额外的可迭代对象参数,函数必须接受该数量的参数,并并行应用于所有可迭代对象的项目。对于多个可迭代对象,当最短的可迭代对象耗尽时,迭代器停止。对于函数输入已按 元组 排列的情况。

简介

map 函数,map(function, iterable) 接受一个或多个可迭代对象,一个“回调函数”(通常是 lambda),并返回一个“Map 对象”。该 map 对象包含 map 函数将回调函数应用于每个可迭代对象元素的后的结果。Map 同时迭代提供的可迭代对象。也就是说,在 map 函数的每一步“i”中,每个可迭代对象索引“i”处的元素将可供 map 函数在当时使用。在完成映射后,您通常会希望将结果 map 对象转换为 列表元组 或另一种更方便处理的对象形式。

***重要提示:从 Python 3 发布以来,如果提供给 map 的可迭代对象的长度不同,map 将在达到与最短可迭代对象长度相等的步数时停止并返回。

输入参数

Function: 接受 Map 当前步数对应的项目(或项目),并以函数返回的结果作为要存储在 Map 对象中的项目。存储到 map 对象中的元素的类型将与函数返回的类型相同。

Iterable(s): <router-link to="/builtin/tuple">元组</router-link><router-link to="/builtin/list">列表</router-link><router-link to="/builtin/range">范围</router-link><router-link to="/builtin/dict">字典</router-link><router-link to="/builtin/set">集合</router-link><router-link to="/builtin/str">字符串</router-link>

一个非常简单的例子

def double_map(func, iter):
    my_map = map(func, iter)
    return list(my_map)

def double(element):
    return element * 2

nums = [1, 2, 3, 4]

print(double_map(double, nums))
[2, 4, 6, 8]

一个不那么简单的例子

此示例使用了写为 lambda 的回调函数,以及

def multi_map(func, *iters):
    my_map = map(func, *iters)
    return list(my_map)

list1 = [1, 2, 3]
list2 = [4, 5, 6]

print(multi_map((lambda item1, item2: item1 * item2), list1, list2))
[4, 10, 18]

一个演示 map 如何处理不同可迭代对象长度的示例

def max(a, b):
    if a > b:
        return a
    else:
        return b

list1 = [1, 1, 1]
list2 = [0, 0, 0, 1, 1, 1, 1, 1, 1, 1]

result = list(map(max, list1, list2))

print(result)
[1, 1, 1]

注意结果列表的长度与 list1 的长度相同?

相关链接