35

我可能hashmap对 Java 和Python 中的map/感到困惑。 我认为 Java 的(k/v 抽象) 与Python中的相同dict
hashdict

但是map数据类型有什么作用呢?

它和 hashmap 抽象是同一个抽象吗?如果是这样,那么它与字典有何不同?
我浏览了文档,但它把我带到了不同的范式:函数式编程。

4

5 回答 5

32

Map不是 python 中的数据类型。它将函数应用于一系列值并返回结果。

>>> def f(x):
...     return x**2
... 
>>> list(map(f, range(5)))
[0, 1, 4, 9, 16]

通常对于像“pythonic”这样的简单情况,我们使用列表推导。

>>> [x**2 for x in range(5)]
[0, 1, 4, 9, 16]

您对哈希图和字典的比较是正确的。

于 2012-04-08T20:50:28.793 回答
4

本质上Map,Java 中的 adict与 Python 中的 a 类似:两种数据结构都在键和值之间创建关联,并且对于get()andcontains()操作具有预期的 O(1) 性能。

Java 中的Map数据结构不应与map()Python 中的函数混淆:

地图(函数,可迭代,...)

将函数应用于可迭代的每个项目并返回结果列表。如果传递了额外的可迭代参数,则函数必须接受那么多参数并并行应用于所有可迭代的项目

于 2012-04-08T20:51:30.157 回答
2

Nolen 的答案是针对 Python 2。

在 Python 3中,map 是一个可迭代的数据类型,相当于 Python 2 中 itertools 的 imap 返回的数据类型。

要在 Python 3 中获得与上面第一个 Python 2 示例相同的结果,您可以编写:

>>> def f(x):
...     return x**2
... 
>>> list(map(f, range(5)))

[0, 1, 4, 9, 16]
于 2018-06-28T19:58:55.360 回答
1

python中没有地图数据类型。map 是将函数映射到序列的函数。

def increment(n):
    return n+1
l = [1,2,3]
map(increment, l)

会给你一个新的列表 [2,3,4]

于 2012-04-08T20:51:26.810 回答
1

在 Python 3中,map 返回一个可迭代的数据类型,相当于 Python 2 中 itertools 的 imap 返回的数据类型。

要在 Python 3 中获得与Nolan Royalty 的Python 2 示例相同的结果,您可以编写:

>>> def f(x):
...     return x**2
... 
>>> list(map(f, range(5)))

[0, 1, 4, 9, 16]

如果您不在 Python 3 中将其包装在列表中,您将获得一个地图对象:

>>> map(f, range(5))
... <map object at 0x000000000327E780>

因此,在 Python 3 中有可迭代地图对象。

于 2017-07-13T17:26:11.180 回答