Python:list.index无法找到现有元素

时间:2011-10-30 10:20:06

标签: python list

有人可以向我解释一下funcion list.index()的功能吗?我有以下代码:

def getPos(self,tile):
        print self.tiles[5][5]
        print tile
        try:
           myIndex = self.tiles.index(tile)
           #some code
        except:
           print "exception raised"
           #some code

结果:

<Tile.Tile instance at 0x36BCEB8>
<Tile.Tile instance at 0x36BCEB8>
exception raised

你知道为什么list.index()会返回异常,尽管tile变量是对tiles [] []元素的引用?非常感谢。

ps:顺便说一下,我在这个具体案例中传递了瓷砖[5] [5]

3 个答案:

答案 0 :(得分:4)

self.tiles似乎是序列的序列(例如列表或元组)。 self.tiles的元素是序列,而不是瓷砖。

self.tiles.index(tile)尝试查找等于tile的序列,然后失败。

尝试改为:

def getPos(self,tile):
    for i,row in enumerate(self.tiles):
        for j,elt in enumerate(row):
            if tile == elt:
                return (i,j)
    raise ValueError('no tile found')

答案 1 :(得分:3)

虽然该元素确实存在,但它不是tiles的成员:

  • tiles是一个二维列表(列表列表)。
  • tiles[5]Tile s。
  • 的列表
  • tiles[5][5]是一个Tile

Python不会递归地下降到多维列表中以查找您正在寻找的元素。因此tiles.index(tile)失败; tiles[5].index(tile)会奏效。

举例说明:

>>> l = [[1,2], [3,4]]
>>> l.index(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 4 is not in list
>>> l[1].index(4)
1

答案 2 :(得分:-1)

tile [5] [5]和tile如何指向同一个实例?在我看来,你在tile [5] [5]中抓取整个这个对象作为tile并尝试将其定位为它的元素。不明白你的意图