地图()

map() 是一个内置函数,可用于将函数应用于 iterable 的元素。在 Python 2 中,map 返回一个列表。在 Python 3 中,map 返回一个地图对象,它是一个生成器。

# Python 2.X
>>> map(str, [1, 2, 3, 4, 5])
['1', '2', '3', '4', '5']
>>> type(_)
>>> <class 'list'>

# Python 3.X
>>> map(str, [1, 2, 3, 4, 5])
<map object at 0x*>
>>> type(_)
<class 'map'>

# We need to apply map again because we "consumed" the previous map....
>>> map(str, [1, 2, 3, 4, 5])
>>> list(_)
['1', '2', '3', '4', '5']

在 Python 2 中,你可以传递 None 作为身份函数。这在 Python 3 中不再有效。

Python 2.x >= 2.3

>>> map(None, [0, 1, 2, 3, 0, 4])
[0, 1, 2, 3, 0, 4]

Python 3.x >= 3.0

>>> list(map(None, [0, 1, 2, 3, 0, 5]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable

此外,当在 Python 2 中传递多个可迭代的参数时,mapNone 填充较短的迭代(类似于 itertools.izip_longest)。在 Python 3 中,迭代在最短迭代之后停止。

在 Python 2 中:

Python 2.x >= 2.3

>>> map(None, [1, 2, 3], [1, 2], [1, 2, 3, 4, 5])
[(1, 1, 1), (2, 2, 2), (3, None, 3), (None, None, 4), (None, None, 5)]

在 Python 3 中:

Python 3.x >= 3.0

>>> list(map(lambda x, y, z: (x, y, z), [1, 2, 3], [1, 2], [1, 2, 3, 4, 5]))
[(1, 1, 1), (2, 2, 2)]

# to obtain the same padding as in Python 2 use zip_longest from itertools
>>> import itertools
>>> list(itertools.zip_longest([1, 2, 3], [1, 2], [1, 2, 3, 4, 5]))
[(1, 1, 1), (2, 2, 2), (3, None, 3), (None, None, 4), (None, None, 5)]

注意 :代替 map 考虑使用与 Python 2/3 兼容的列表推导。取代 map(str, [1, 2, 3, 4, 5])

>>> [str(i) for i in [1, 2, 3, 4, 5]]
['1', '2', '3', '4', '5']