2012-04-08 51 views
10

Tôi có thể bị nhầm lẫn giữa hashmap trong Java và map/dict bằng Python.
Tôi nghĩ rằng hash (k/v trừu tượng) của Java là loại giống như dict bằng PythonSự khác biệt giữa bản đồ và dict

Nhưng sau đó những gì hiện các map datatype làm gì?

Có cùng sự trừu tượng như trừu tượng băm không? Nếu vậy, thì nó khác với từ điển như thế nào?
Tôi đã đi qua các tài liệu, nhưng nó đã đưa tôi đến toàn bộ mô hình khác nhau: lập trình chức năng.

+1

Câu hỏi của bạn là một chút không rõ ràng, nhưng đối với Python, đây có thể là tài liệu bạn đang tìm kiếm: http : //docs.python.org/library/stdtypes.html # mapping-types-dict –

Trả lời

15

Map không phải là kiểu dữ liệu trong python. Nó áp dụng một hàm cho một loạt các giá trị và trả về kết quả.

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

Thường trong trường hợp đơn giản như "pythonic", chúng tôi sử dụng tính năng đọc danh sách.

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

Bạn có quyền so sánh các hashmaps và dicts.

+3

Vâng, bản đồ không phải là kiểu dữ liệu :-) Xem http://docs.python.org/library/functions.html#map –

+0

@MaksymPolshcha nhờ liên kết, tôi đã chỉnh sửa nó vào bài đăng của tôi. –

+0

Theo Python 3, bản đồ * là * một kiểu dữ liệu - [xem câu trả lời của tôi.] (Https://stackoverflow.com/a/45087342/1048186) –

2

Không có loại dữ liệu bản đồ nào trong python. map là một hàm ánh xạ một hàm tới một chuỗi.

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

sẽ cung cấp cho bạn một danh sách mới [2,3,4]

2

Về bản chất một Map trong Java cũng giống như một dict bằng Python: cả dữ liệu cấu trúc tạo sự liên kết giữa các phím và các giá trị, với dự kiến ​​O (1) hiệu suất cho các hoạt động get() và .

Cấu trúc Map dữ liệu trong Java không nên nhầm lẫn với map() hàm trong Python:

bản đồ (chức năng, iterable, ...)

Áp dụng chức năng để tất cả các mục của iterable và trở lại một danh sách các kết quả. Nếu thêm lập luận iterable được thông qua, chức năng phải mất rằng nhiều tranh cãi và được áp dụng cho các mặt hàng từ khắp nơi iterables song song

+2

"Đảm bảo hiệu suất O (1)" không hoàn toàn đúng. Xem http://wiki.python.org/moin/TimeComplexity – agf

0

Trong Python 3, bản đồ trả về một kiểu dữ liệu iteratable, tương đương với những gì được trả về bởi imap itertools của bằng Python 2.

Để có được kết quả tương tự bằng Python 3 như Nolan Royalty's Python 2 Ví dụ, bạn sẽ viết:

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

[0, 1, 4, 9, 16] 

Nếu bạn không bọc nó trong một danh sách bằng Python 3, bạn sẽ nhận được một bản đồ obj vv:

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

Vì vậy, có đối tượng bản đồ, đó là iterable, bằng Python 3.

Các vấn đề liên quan