primes = [2,3,5,7..] (prime numbers)
map(lambda x:print(x),primes)
它不会打印任何内容。 这是为什么? 我试过了
sys.stdout.write(x)
也是,但也不起作用。
答案 0 :(得分:69)
由于lambda x: print(x)
是Python中的语法错误< 3,我假设Python 3.这意味着map
返回一个生成器,意味着要使map实际调用列表中每个元素的函数,你需要遍历生成的生成器。
幸运的是,这可以轻松完成:
list(map(lambda x:print(x),primes))
哦,如果你愿意的话,你也可以摆脱lambda:
list(map(print,primes))
但是,在那时你最好让印花处理它:
print(*primes, sep='\n')
注意:我之前说'\n'.join
是个好主意。这只适用于str的列表。
答案 1 :(得分:6)
这对我有用:
>>> from __future__ import print_function
>>> map(lambda x: print(x), primes)
2
3
5
7
17: [None, None, None, None]
您使用的是Python 2.x,其中print是一个语句,而不是一个函数?
答案 2 :(得分:0)
您可能会看到的另一个原因是,您没有评估map函数的结果。它会返回一个生成器(可迭代),该生成器懒惰地评估您的函数,而不是实际列表。
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函数。
答案 3 :(得分:0)
或者,您可以像下面这样将*
放在map(...)
之前,将其打开包装
[*map(...)]
或
{*map(...)}
选择所需的输出,列表或字典。