2012-04-08 13 views
10

Mogę być zdezorientowany między hashmap w Javie i map/dict w Pythonie.
Myślałem, że hash (k/v abstrakcji) Java jest niby taki sam jak dict w PythonieRóżnica między mapą a dyktowaniem

Ale to co robi map datatype zrobić?

Czy jest to ta sama abstrakcja, co abstrakcja z hashmapu? Jeśli tak, to w jaki sposób różni się od słownika?
Przeszedłem przez dokumentację, ale zajęło mi to połączenie różnych paradygmatów: programowania funkcjonalnego.

+1

Twoje pytanie jest nieco niejasne, ale dla Pythona, to może być dokumentacja szukasz: http : //docs.python.org/library/stdtypes.html # mapping-types-dict –

Odpowiedz

15

Map nie jest typem danych w python. Stosuje funkcję do serii wartości i zwraca wynik.

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

Często dla prostego przypadku, takiego jak "pytonowy", używamy wyrażeń listowych.

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

Masz rację w porównaniu hashmaps i dyktuje.

+3

Tak, mapa nie jest typem danych :-) Zobacz http://docs.python.org/library/functions.html#map –

+0

@MaksymPolshcha dzięki za link, edytowałem to w moim poście. –

+0

Od Pythona 3 mapa * jest * typem danych - [zobacz moją odpowiedź.] (Https://stackoverflow.com/a/45087342/1048186) –

2

Brak danych o typie mapy w pythonie. map jest funkcją, która odwzorowuje funkcję na sekwencję.

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

daje nową listę [2,3,4]

2

W istocie Map w Javie jest jak dict w Pythonie: obie struktury danych tworzonych związków między kluczy i wartości, z oczekiwanym O (1) wydajność dla operacji get() i .

Struktura Map danych w Javie nie należy mylić z funkcją map() w Pythonie:

mapie (funkcja, iterable, ...)

Zastosuj funkcję do każdego elementu iterable i powrotu lista wyników. Jeśli dodatkowe iterowalny argumenty są przekazywane, funkcja musi przyjąć, że wiele argumentów i jest stosowana do elementów ze wszystkich iterables równolegle

+2

"Gwarantowana wydajność O (1)" nie jest całkiem poprawna. Zobacz http://wiki.python.org/moin/TimeComplexity – agf

0

W Pythonie 3, mapa zwraca iteracyjnych typ danych, co odpowiada co jest zwracane przez IMAP itertools męska w Pythonie 2.

Aby uzyskać takie same wyniki jak w Pythonie 3 Nolan Royalty's Python 2 przykład byłoby napisać:

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

[0, 1, 4, 9, 16] 

Jeśli nie zawinąć go na liście w Pythonie 3, dostaniesz map obj ect:

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

Więc map obiektów, które są iterable, w Pythonie 3.

Powiązane problemy