Czy ktoś może mi wyjaśnić, jak funkcjonować listy funkcji.index ()? Mam następujący kod:

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

Wynik:

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

Czy masz pomysł, dlaczego list.index () zwraca wyjątek, chociaż zmienna płytek jest odniesieniem do elementu płytek [] []? Wielkie dzięki.

PS: BTW Pasując płytki [5] [5] W tym konkretnym przypadku

3
gramm 30 październik 2011, 14:20

3 odpowiedzi

Najlepsza odpowiedź

Podczas gdy element istnieje, nie jest bezpośrednio członkiem tiles:

  • tiles to dwuwymiarowa lista (lista list).
  • tiles[5] to lista Tile s.
  • tiles[5][5] to pojedynczy Tile.

Python nie rekurencyjnie opada na wielowymiarową listę, aby znaleźć element, którego szukasz. Dlatego tiles.index(tile) nie powiedzie się; tiles[5].index(tile) będzie działał.

Ilustrować:

>>> 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
3
Tim Pietzcker 30 październik 2011, 10:31

self.tiles wydaje się być sekwencją (np. Lista lub krotka) sekwencji. Elementy self.tiles są sekwencjami, a nie płytkami.

self.tiles.index(tile) stara się znaleźć sekwencję, która równa się tile i nie powiedzie się.

Spróbuj zamiast tego:

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')
4
unutbu 30 październik 2011, 10:39

Jak płytki [5] [5] i płytki wskazują na tę samą instancję? Wydaje mi się, że masz cały ten obiekt na płytce [5] [5] jako płytki i spróbuj zlokalizować go jako elementu. nie rozumiesz swojego zamiaru

-1
yosukesabai 30 październik 2011, 10:34