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