如何用lambda打印字符串列表?

时间:2018-04-06 13:23:04

标签: python python-3.x lambda

我有一个使用普通循环打印出来的字符串列表:

for x in listing:
    print(x)

我认为使用lambda来减少循环语法应该非常简单,并启动我在Python中学习lambdas(我对Python很新)。

map的{​​p> Given that the syntax map(function, iterable, ...)我试过了:

map(lambda x: print(x), listing)

但这不会打印任何内容(它也不会产生错误)。我已经在网上搜索了一些材料但是我迄今发现的所有东西都基于Python 2,即提到Python 2这是不可能的,但它应该在Python 3中,没有明确提到如何。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

在python 3中,map返回一个迭代器:

>>> map(print, listing)
<map object at 0x7fabf5d73588>

这个迭代器是 lazy ,这意味着在迭代它之前它不会做任何事情。一旦你迭代它,你就会得到列表的值:

>>> listing = [1, 2, 3]
>>> for _ in map(print, listing):
...     pass
... 
1
2
3

这也意味着map不适合这项工作。 map创建一个迭代器,因此只有在您计划迭代该迭代器时才应该使用它。它不应用于副作用,如打印值。另请参阅When should I use map instead of a for loop

答案 1 :(得分:1)

我不建议在这里使用map,因为你并不真正关心迭代器。如果您想简化基本的“for循环”,可以使用str.join()

>>> mylist = ['hello', 'there', 'everyone']
>>> '\n'.join(mylist)
hello
there
everyone

或者如果你有一个非字符串列表:

>>> mylist = [1,2,3,4]
>>> '\n'.join(map(str, mylist))
1
2
3
4