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:列表索引必须是整数,而不是浮点数

TypeError:元组索引必须是整数,而不是使用 pyspark 和 RDD 的 str

TypeError:列表索引必须是整数或切片,而不是 str

类型错误:列表索引必须是整数或切片,而不是 str 尝试使用 cx_Freeze 将 .py 文件转换为 .exe 时