![](/img/trans.png)
[英]Init object error TypeError: 'int' object has no attribute '__getitem__'
[英]Why do I get and error when my loop runs the 2nd time? TypeError: 'int' object has no attribute '__getitem__'
该代码的目的是根据给定的移动来更改板上的数字。
这是我的代码的简化摘录,我希望原理保持不变。
似乎代码在第一个循环中运行,但是在下一次循环时却给出错误: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
ind = 0
move = [[0,0], [7,4]]
for k in move:
move = move[ind]
print(move)
版画
[0, 0]
0
在第二次迭代中, move
等于0。因此
move[0]
引发TypeError
。
我不太确定您的代码的意图是什么,但是可以避免使用k
而不是move
的TypeError。 (下面我改名move
- > moves
,并k
- > move
):
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)
请注意, boardlist = [board]*2
构成一个2元素列表,其中每个元素都引用完全相同的对象,而不是board
的副本。 因此,更改boardlist0[0]
会影响boardlist0[1]
,反之亦然。 如果您想要两个独立的板,请使用
boardlist0 = [board.copy() for i in range(2)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.