我可能会对Java中的hashmap
和Python中的map
/ dict
感到困惑。
我认为Java的hash
(k / v抽象)与Python中的dict
相同
但是map
数据类型的作用是什么?
它与hashmap抽象是一样的抽象吗?如果是这样,那么它与字典有什么不同呢? 我浏览了文档,但它让我把不同的范例整合在一起:函数式编程。
答案 0 :(得分:19)
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]
你正好比较了hashmaps和dicts。
答案 1 :(得分:3)
本质上,Java中的Map
就像Python中的dict
:两个数据结构都创建了键和值之间的关联,get()
和{的预期O(1)性能{1}}操作。
Java中的contains()
数据结构不应与Python中的map()
函数混淆:
map(function,iterable,...)
将函数应用于iterable的每个项目并返回结果列表。如果传递了额外的可迭代参数,则函数必须采用那么多参数并且并行地应用于所有迭代的项目
答案 2 :(得分:2)
python中没有地图数据类型。 map是一个将函数映射到序列的函数。
def increment(n):
return n+1
l = [1,2,3]
map(increment, l)
会给你一个新的清单[2,3,4]
答案 3 :(得分:1)
Nolen's answer适用于Python 2。
在Python 3中,map是一种可迭代的数据类型,等效于itertools的imap在Python 2中返回的数据。
要获得与上述Python 3中第一个Python 2示例相同的结果,请编写:
>>> def f(x):
... return x**2
...
>>> list(map(f, range(5)))
[0, 1, 4, 9, 16]
答案 4 :(得分:0)
在Python 3 中,map返回一个iteratable数据类型,等同于Python 2中itertools的imap返回的数据类型。
要在Python 3中获得与{3}} 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中迭代的地图对象。