Python 'list indices must be integers, not tuple" error
我正致力于在8x 8的二维网格房间内移动机器人,其中一部分正在初始化传感器,传感器由机器人周围最近的5块瓷砖组成。
1 | self.sensors = [0 for x in xrange(5)] |
这里我创建了一个空的5个元素数组。
但当我试图设置这样的传感器值时:
1 2 3 4 5 6 | if self.heading == 'East': self.sensors[0] = self.room[self.x, self.y-1] self.sensors[1] = self.room[self.x+1, self.y-1] self.sensors[2] = self.room[self.x+1, self.y] self.sensors[3] = self.room[self.x+1, self.y+1] self.sensors[4] = self.room[self.x, self.y+1] |
号
我得到"列表索引必须是整数,而不是元组"的错误。
你说
1 | self.room[self.x][self.y-1] |
而不是用对
问题来自你的
因为这样:
1 | self.room[self.x, self.y-1] |
号
与以下内容相同:
1 | self.room[(self.x, self.y-1)] |
这就是你的
有两种可能性:
self.room 是一个二维数组,这意味着您可能意味着:1self.room[self.x][self.y-1]你想切片
self.room :1self.room[self.x:self.y-1]
小精灵
请提供有关
为什么会出错?我不会传递任何元组!
因为处理
1 2 3 4 5 6 7 8 9 | class C(object): def __getitem__(self, k): return k # Single argument is passed directly. assert C()[0] == 0 # Multiple indices generate a tuple. assert C()[0, 1] == (0, 1) |
。
清单并不是用来处理这些争论的。
更多示例请访问:https://stackoverflow.com/a/33086813/895245
什么是self.room类型,我认为room是一个列表,在这种情况下,您必须这样分配
1 2 | if self.heading == 'East': self.sensors[0] = [self.x, self.y-1] |
。
或者像这样
1 2 3 | if self.heading == 'East': self.room = [self.x, self.y-1] self.sensors[0] = self.room |
。
这样地
1 2 3 4 5 6 7 8 9 10 | >>> a = [] >>> type(a) <type 'list'> >>> a[2,3] Traceback (most recent call last): File"<stdin>", line 1, in ? TypeError: list indices must be integers >>> a = [2,3] |
这是因为列表索引必须是整数,而不是其他任何东西。在您的例子中,您尝试使用元组。
您的代码特别奇怪,因为您无法用元组索引创建