例如,我想打印出一个最初为 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)
?
请您参考如下方法:
内置的 list 构造函数是强制迭代器和生成器在 Python 中完全迭代的常用方法。当您调用 map 时,它只返回一个 map 对象,而不是实际评估映射,这不是您的代码片段的作者所希望的。
然而,考虑到 Python 3 中 print 函数本身所拥有的所有功能,使用 map 只是在单独的行上打印 iterable 的所有项目是不够优雅的:
>>> 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 循环:
for row in board: print row
- 从
__future__模块导入 Python 3 的打印函数:
from __future__ import print_function
