Python 'list indices must be integers, not tuple\" error

泪湿孤枕 提交于 2019-11-29 15:10:11

You say self.room is a "2d grid" -- I assume it is a list of lists. In this case, you should access its elements as

self.room[self.x][self.y-1]

instead of indexing the outer list with the pair self.x, self.y-1.

The problem comes from your self.room.

Beacuse this:

self.room[self.x, self.y-1]

Is the same of:

self.room[(self.x, self.y-1)]

And that's your tuple error.

There are two possibilities:

  • self.room is a 2D array, which means that you probably meant something like:

    self.room[self.x][self.y-1]
    
  • you wanted to slice self.room:

    self.room[self.x:self.y-1]
    

Please provide more information about self.room.

self.room[self.x, self.y-1] indexes self.room with a tuple. If it is a ragged array then you must use self.room[self.x][self.y-1] instead.

what is the type of self.room, i think room is a list in this case you have to assign like this

if self.heading == 'East':
   self.sensors[0] = [self.x, self.y-1]

or like this

if self.heading == 'East':
    self.room = [self.x, self.y-1]
    self.sensors[0] = self.room

like this

>>> 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]
Ciro Santilli 新疆改造中心996ICU六四事件

Why does it give that error? I'm not passing any tuples!

Because __getitem__, which deals with [] resolution, converts self.room[1, 2] to a tuple:

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)

and lists are not made to deal with such arguments.

More examples at: https://stackoverflow.com/a/33086813/895245

This is because list indices must be integers, not anything else. In your case, you are trying to use tuples.

Your code is particularly odd, because there is no way you ever created self.room with tuple indices.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!