primes = [2,3,5,7..] (prime numbers)
map(lambda x:print(x),primes)
它没有打印任何东西。
为什么呢?
我试过sys.stdout.write(x)
也是这样,但也没用。
primes = [2,3,5,7..] (prime numbers)
map(lambda x:print(x),primes)
它没有打印任何东西。
为什么呢?
我试过sys.stdout.write(x)
也是这样,但也没用。
由于在 Python 3 中,lambda x: print(x)
是语法错误,因此我假设您使用的是 Python 3。这意味着map
返回一个生成器,因此要让map实际上调用列表中每个元素上的函数,您需要遍历生成器。
幸运的是,这很容易实现:
list(map(lambda x:print(x),primes))
哦,如果你喜欢的话,也可以去掉 lambda:
list(map(print,primes))
但是,在那个时候,最好让print处理它:
print(*primes, sep='\n')
注意:我之前说过'\n'.join
是个好主意,但只对字符串列表有效。
print(*primes, sep ='\ n')
,或print('\n'.join(str(x) for x in primes))
。 - user395760lambda
或任何其他表达式中发生,它都可以(带或不带括号)。我认为OP的意思是这个,你只是想挑剔措辞而已 ;) - user395760next((x for x in map(print, primes) if x != None), None)
避免累积“None”,但没有理由这样做。 - agf>>> from __future__ import print_function
>>> map(lambda x: print(x), primes)
2
3
5
7
17: [None, None, None, None]
您是否在使用 Python 2.x 版本,其中 print 是一个语句而不是一个函数?
print
被用作函数,并且由于sys.stdout.write
“也不起作用”。 - user395760map(print, primes)
,而不需要定义一个lambda函数。 - hitzg或者,您可以按照以下方式在 map(...)
前加上*
来展开它:
[*map(...)]
{*map(...)}
请选择所需的输出格式,列表或字典。
你看到这个问题的另一个原因可能是你没有评估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))
,这也会强制对生成器进行求值,并在列表的每个成员上调用打印函数。