繁体   English   中英

为什么我的循环第二次运行时出现错误? TypeError:“ int”对象没有属性“ __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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM