Python 为什么循环第二次运行时会出现错误?类型错误:';int';对象没有属性'__获取项目';
此代码的目的是根据给定的移动更改板上的数字 这是我代码的一个简化摘录,我希望原则保持不变 代码似乎在第一个循环中运行,但在另一次运行时会出现错误:TypeError:“int”对象没有属性“getitem” 我们将不胜感激Python 为什么循环第二次运行时会出现错误?类型错误:';int';对象没有属性'__获取项目';,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,此代码的目的是根据给定的移动更改板上的数字 这是我代码的一个简化摘录,我希望原则保持不变 代码似乎在第一个循环中运行,但在另一次运行时会出现错误:TypeError:“int”对象没有属性“getitem” 我们将不胜感激 import numpy board = numpy.array([[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0,
import numpy
board = numpy.array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 2, 0, 0, 0],
[0, 0, 0, 2, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
boardlist0 = [board]*2
boardlist1 = []
ind = 0
move = [[0,0], [7,4]]
for k in move:
move = move[ind]
boardlist0[ind][move[0]][move[1]] = 1
boardlist1.append(boardlist0)
ind += 1
印刷品
[0, 0]
0
在第二次迭代中,move
等于0。所以
move[0]
引发类型错误
我不太清楚您的代码的意图是什么,但是您可以使用
k
而不是move
来避免类型错误。(下面我重命名了move
-->moves
,和k
-->move
):
请注意,
boardlist=[board]*2
生成一个两元素列表,其中每个元素引用完全相同的对象,而不是--board
的副本。因此,更改boardlist0[0]
会影响boardlist0[1]
,反之亦然。如果您想要两个独立的板,请使用
boardlist0 = [board.copy() for i in range(2)]
import numpy
board = numpy.array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 2, 0, 0, 0],
[0, 0, 0, 2, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
boardlist0 = [board]*2
moves = [[0,0], [7,4]]
for move, board in zip(moves, boardlist0):
board[move[0], move[1]] = 1
for board in boardlist0:
print(board)
boardlist0 = [board.copy() for i in range(2)]