Подтвердить что ты не робот

Печать не печатается, когда она находится на карте, Python

primes = [2,3,5,7..] (prime numbers)
map(lambda x:print(x),primes)

Он ничего не печатает. Почему это? Я пробовал

sys.stdout.write(x)

тоже, но не работает.

4b9b3361

Ответ 1

Так как 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.

Ответ 2

Это работает для меня:

>>> from __future__ import print_function
>>> map(lambda x: print(x), primes)
2
3
5
7
17: [None, None, None, None]

Используете ли вы 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 для каждого члена вашего списка.