我有一个使用普通循环打印出来的字符串列表:
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中,没有明确提到如何。
我做错了什么?
答案 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