当它在地图中时,打印不会打印,Python

时间:2011-10-11 19:11:14

标签: python-3.x dictionary

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

它不会打印任何内容。 这是为什么? 我试过了

sys.stdout.write(x)

也是,但也不起作用。

4 个答案:

答案 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(...)}

选择所需的输出,列表或字典。