Python'列表索引必须是整数,而不是元组”错误
Posted
技术标签:
【中文标题】Python\'列表索引必须是整数,而不是元组”错误【英文标题】:Python 'list indices must be integers, not tuple" errorPython'列表索引必须是整数,而不是元组”错误 【发布时间】:2012-03-11 04:30:54 【问题描述】:我正在研究在 8 x 8 的 2d 网格房间中移动机器人,其中一部分是初始化由机器人周围最近的 5 个瓷砖组成的传感器。
self.sensors = [0 for x in xrange(5)]
这里我创建了一个由 5 个元素组成的空数组。
但是当我尝试像这样设置传感器的值时:
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.room[self.x][self.y-1]
而不是使用 self.x, self.y-1
对来索引外部列表。
【讨论】:
【参考方案2】:问题出在你的self.room
。
因为这个:
self.room[self.x, self.y-1]
同:
self.room[(self.x, self.y-1)]
这就是你的tuple
错误。
有两种可能:
self.room
是一个二维数组,这意味着您的意思可能类似于:
self.room[self.x][self.y-1]
你想切片self.room
:
self.room[self.x:self.y-1]
请提供更多关于self.room
的信息。
【讨论】:
Room 确实是一个二维数组,我使用了错误的语法。谢谢你。 :) 谢谢 - 使用,而不是 : 直到我读到你的答案才找到它:)【参考方案3】:self.room[self.x, self.y-1]
使用元组索引 self.room
。如果是参差不齐的数组,则必须改用self.room[self.x][self.y-1]
。
【讨论】:
【参考方案4】:self.room 的类型是什么,我认为 room 是一个列表,在这种情况下你必须像这样分配
if self.heading == 'East':
self.sensors[0] = [self.x, self.y-1]
或者像这样
if self.heading == 'East':
self.room = [self.x, self.y-1]
self.sensors[0] = self.room
喜欢这个
>>> 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]
【讨论】:
【参考方案5】:为什么会出现这个错误?我没有传递任何元组!
因为处理[]
分辨率的__getitem__
将self.room[1, 2]
转换为元组:
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://***.com/a/33086813/895245
【讨论】:
【参考方案6】:这是因为列表索引必须是整数,而不是其他任何东西。在您的情况下,您正在尝试使用元组。
您的代码特别奇怪,因为您无法使用元组索引创建 self.room
。
【讨论】:
以上是关于Python'列表索引必须是整数,而不是元组”错误的主要内容,如果未能解决你的问题,请参考以下文章
Python - TypeError:元组索引必须是整数或切片,而不是str [duplicate]
DataFrame 无法迭代:出现以下错误:元组索引必须是整数或切片,而不是 str
TypeError:元组索引必须是整数,而不是使用 pyspark 和 RDD 的 str