Так как lambda x: print(x) является синтаксической ошибкой в Python < 3, я предполагаю, что Python 3. Это означает, что map возвращает генератор, что означает, что для того, чтобы на самом деле вызвать функцию для каждого элемента списка, необходимо выполнить итерацию результирующего генератора.
К счастью, это можно сделать легко:
list(map(lambda x:print(x),primes))
О, и вы можете избавиться от лямбда, если хотите:
list(map(print,primes))
Но в этот момент вам лучше справиться с этим:
print(*primes, sep='\n')
ПРИМЕЧАНИЕ. Я сказал ранее, что '\n'.join будет хорошей идеей. Это справедливо только для списка str.
Используете ли вы Python 2.x, где print - это оператор, а не функция?
Ответ 3
Кроме того, вы можете распаковать его, поместив * перед map(...), как показано ниже:
[*map(...)]
или
{*map(...)}
Выберите желаемый результат, список или словарь.
Ответ 4
Другая причина, по которой вы можете увидеть это, заключается в том, что вы не оцениваете результаты функции карты. Он возвращает генератор (итеративный), который оценивает вашу функцию лениво, а не фактический список.
primes = [2,3,5,7]
map(print, primes) # no output, because it returns a generator
primes = [2,3,5,7]
for i in map(print, primes):
pass # prints 2,3,5,7
Кроме того, вы можете сделать list(map(print, primes)) который также заставит генератор быть оцененным и вызвать функцию print для каждого члена вашего списка.