例如,我想打印一个最初为tic tac toe的板子
board = [[0]*3]*3
我想使用map将print()应用于每一行,以便输出
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
在Python 3中,map返回一个迭代器而不是一个列表,所以我找到的一个适应这个的例子是
list(map(print, board))
这给出了正确的输出。但我不知道这里发生了什么 - 有人可以解释你做什么事情
list(iterator)
答案 0 :(得分:4)
内置的list
构造函数是强制迭代器和生成器在Python中完全迭代的常用方法。当您调用map时,它只返回一个map对象,而不是实际评估映射,这是代码片段作者所不希望的。
然而,当您考虑打印函数本身在Python 3中保存的所有功能时,仅使用map
打印单独行上的迭代的所有项目是不优雅的:
>>> board = [[0]*3]*3
>>> board[0] is board[1]
True
>>> "Uh oh, we don't want that!"
"Uh oh, we don't want that!"
>>> board = [[0]*3 for _ in range(3)]
>>> board[0] is board[1]
False
>>> "That's a lot better!"
"That's a lot better!"
>>> print(*board, sep='\n')
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
附加说明:在Python 2中,print
被视为一种陈述,并且功能不强,你仍然至少有两个更好的选择而不是使用map
:
for row in board: print row
__future__
模块导入Python 3的打印功能: from __future__ import print_function
答案 1 :(得分:2)
OrmAdapter
当你在一个iterable上调用>>> list(map(print, board))
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[None, None, None]
时,它会从iterable中提取每个元素。在这种情况下,其副作用是打印三行。但list
操作的结果是print
。因此,对于执行的每个None
,将print
添加到列表中。上面的最后一行由三个Nones组成,是None
返回的实际列表。