Python: печать элементов с использованием функции карты - PullRequest
2 голосов
/ 25 апреля 2019

Я новичок в Python и изучаю, как использовать функцию map.Я сталкиваюсь со следующей проблемой:

li=['12','34']
ints=map(int,li)
list(ints) #prints [12,34] OK
p1 = map(print,list(ints))
list(p1)   #prints [] WHY?
p2 = map(print, li)
list(p2)   #prints 12 34 [None, None] OK

Я просто сопоставил print функцию со списком строк и списком целых чисел и получил другой результат.Я не понимаю, почему p1 и p2 ведут себя по-разному.

Ответы [ 2 ]

3 голосов
/ 25 апреля 2019

map возвращает объект карты, который при исчерпании не даст значений. Таким образом, когда вы звоните list во второй раз на ints, он не сможет применить функцию ни к чему, тогда list(map(print,list(ints))) вернет пустой список []

Проверьте, что происходит при применении list дважды к одному и тому же объекту карты:

>>> li=['12','34']
>>> ints=map(int,li)
>>> ints
<map object at 0x7f4e375c7898>
>>> list(ints)
[12, 34]
>>> list(ints)
[]
0 голосов
/ 25 апреля 2019

Пожалуйста, перейдите по этой ссылке на карту | фильтр | уменьшить http://dataunbox.com/course/24/118/Python%20for%20dummies
Чтобы ответить на ваш вопрос, функция карты берет list.bou вы предоставили список (список))

li=['12','34']

ints=list(map(lambda x : x,li))
print(ints)

p1 = map(print,ints) ## instead of int probabaly you might have to provide li
list(p1)   #prints [] WHY?
...