web-dev-qa-db-ja.com

マップとディクトの違い

JavaのhashmapとPythonのmap/dictの間で混乱するかもしれません。
Javaのhash(k/v抽象化)はPythonのdictと同じようなものだと思いました

では、mapデータ型は何をするのでしょうか?

ハッシュマップの抽象化と同じ抽象化ですか?もしそうなら、それは辞書とどう違うのですか?
ドキュメントを確認しましたが、関数型プログラミングというさまざまなパラダイムをまとめる必要がありました。

25
Mohit

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]

あなたはハッシュマップとディクテーションの比較に正しいです。

23
Nolen Royalty

本質的に、JavaのMapはPythonのdictのようなものです。両方のデータ構造は、期待されるO(1) get()およびcontains()操作のパフォーマンス。

JavaのMapデータ構造をPythonの map() 関数と混同しないでください。

map(function、iterable、...)

Iterableのすべての項目に関数を適用し、結果のリストを返します。追加の反復可能な引数が渡された場合、関数はその数の引数を取る必要があり、すべての反復可能なアイテムからのアイテムに並行して適用されます

3
Óscar López

Pythonにはマップデータ型はありません。 mapは、関数をシーケンスにマップする関数です。

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

新しいリストが表示されます[2、3、4]

2
DiamRem

ノーレンの答え は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]

Python 3では、mapはitertoolsのimapによってPython 2で返されるものと同等の反復可能なデータ型を返します。

Python 3で Nolan Royaly's 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には、反復可能なareマップオブジェクトがあります。