2012-04-08 229 views
10

我可能會在Python中的hashmap和Python中的map/dict之間混淆。
我認爲爪哇hash(K/V抽象)是一種相同的如在Python地圖和字典之間的區別

dict但那麼,什麼是map數據類型呢?

它和散列圖抽象是一樣的抽象嗎?如果是這樣,那麼它與字典有什麼不同呢?
我仔細閱讀了文檔,但是我花了整個不同的範例:函數式編程。

+1

你的問題是有點不清楚,但爲Python,這可能是你正在尋找的文件:HTTP ://docs.python.org/library/stdtypes。HTML#映射類型快譯通 – 2012-04-08 20:50:37

回答

15

Map在Python中不是數據類型。它將函數應用於一系列值並返回結果。

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

往往像一個簡單的例子是「Python的」我們用列表內涵。

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

你是對你的包含HashMap和類型的字典進行比較。

+3

呀,地圖是不是數據類型:-)看看http://docs.python.org/library/functions.html#map – 2012-04-08 20:51:56

+0

@MaksymPolshcha感謝您的鏈接,我已經編輯它進入我的職務。 – 2012-04-08 20:53:00

+0

對於Python 3,圖*爲*數據類型 - [見我的回答(https://stackoverflow.com/a/45087342/1048186) – 2017-07-13 17:27:17

2

python中沒有地圖數據類型。 map是一個將函數映射到序列的函數。

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

會給你一個新的列表[2,3,4]

2

實質上在Java中的Map就像在Python dict:兩個數據結構創建鍵和值之間的關聯,預計Ø (1)性能爲get()和操作。

Java中的Map數據結構不應該與map()功能在Python混淆:

地圖(函數,迭代,...)

應用功能的迭代和返回每個項目結果列表。如果有額外的迭代傳遞參數,函數必須採取許多爭論和並行

+2

「保證O(1)性能」 是不完全正確。見http://wiki.python.org/moin/TimeComplexity – agf 2012-04-08 21:07:54

0

應用到項目從所有iterables在Python 3,什麼是itertools的IMAP返回映射一個可重複的數據類型,相當於在Python 2

要獲得在Python 3相同的結果Nolan Royalty's的Python 2例如你可以這樣寫:

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

[0, 1, 4, 9, 16] 

如果你沒有在Python 3把它包在一個列表中,你會得到一個地圖obj ECT:

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

所以有地圖對象,這是可迭代的,在Python 3