内置的list
构造函数是强制迭代器和生成器在Python中完全迭代的常用方法。当你调用map时,它只返回一个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 3保持功率
但是,使用map
只打印在单独的行可迭代的所有项目不雅在Python 2,其中print
被视为一个声明,而不是那么强大,你仍然有至少两个比使用map
更好的选择:
- 使用一个很好的旧for循环:
for row in board: print row
- 导入Python从所述
__future__
模块3的打印功能:
from __future__ import print_function
**不要这样做**使用循环。 'map'用于对数据进行转换,而不是引起副作用。 – user2357112
另外,'[[0] * 3] * 3'是初始化该板的错误方法。该董事会中的所有子列表都是相同的列表;只要您尝试对其执行任何操作,例如'board [0] [0] = 1',它就会中断。使用list comprehension:'board = [[0] * 3 for i in xrange(3)]'' – user2357112