Python 为什么循环第二次运行时会出现错误?类型错误:';int';对象没有属性'__获取项目';

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,

此代码的目的是根据给定的移动更改板上的数字

这是我代码的一个简化摘录,我希望原则保持不变

代码似乎在第一个循环中运行,但在另一次运行时会出现错误: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, 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)]