Разница между картой и диктоном
Я мог бы запутаться между hashmap
в Java и map
/dict
в Python.
Я думал, что hash
(k/v абстракция) Java является такой же, как dict
в Python
Но что же делает тип map
datatype?
Является ли это той же абстракцией, что и абстракция hashmap? Если да, то как это отличается от словаря?
Я прошел через документы, но мне потребовалась целая совокупность различных парадигм: функциональное программирование.
Ответы
Ответ 1
Map не является типом данных в python. Он применяет функцию к ряду значений и возвращает результат.
>>> def f(x):
... return x**2
...
>>> map(f, range(5))
[0, 1, 4, 9, 16]
Часто для такого простого случая, как "pythonic", мы используем понимание списков.
>>> [x**2 for x in range(5)]
[0, 1, 4, 9, 16]
Вы правы в сравнении хэш-карт и dicts.
Ответ 2
В python нет типа данных карты. map - это функция, которая отображает функцию в последовательность.
def increment(n):
return n+1
l = [1,2,3]
map(increment, l)
предоставит вам новый список [2,3,4]
Ответ 3
По сути, Map
в Java похож на dict
в Python: обе структуры данных создают ассоциации между ключами и значениями с ожидаемой производительностью O (1) для операций get()
и contains()
.
Структуру данных Map
в Java не следует путать с функцией map()
в Python:
map (function, iterable,...)
Применить функцию к каждому элементу итерации и вернуть список результатов. Если передаются дополнительные итеративные аргументы, функция должна принимать много аргументов и применяется к элементам из всех повторяющихся параллельных
Ответ 4
В Python 3 карта возвращает итеративный тип данных, эквивалентный тому, что возвращается itertools imap в Python 2.
Чтобы получить те же результаты в Python 3 как Nolan Royalty 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 есть объекты , которые являются итерабельными.