# [Tutor] indexing lists

**Michael P. Reilly
**
arcege@shore.net

*Mon, 5 Jun 2000 12:34:30 -0400 (EDT)*

>*
*>* Hi everyone,
*>*
*>* I'm wondering how, if even possible, you'd find the index of a given number
*>* in the following list of lists:
*>*
*>* l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
*>*
*>* I've been playing around with my little tic tac toe program, and I can't
*>* decide whether to use this list of lists structure for the matrix or a
*>* simpler [1, 2, 3, 4, 5, 6, 7, 8, 9] structure.
*>*
*>* I think programming the strategy might be easier with the more 2-dimensional
*>* list of lists. But finding which moves are possible involves determining
*>* which places in the list are occupied by integers, not "X" or "O". I need to
*>* do l.index(spam) for that. Unfortunately, I can't do l.index(5). I can do
*>* l.index([1, 2, 3]), however. Is it possible to get at that 2nd layer of
*>* lists through an index statement?
*
Building a "Board" class can probably help you a great deal.
import types
from UserList import UserList
class Board(UserList):
dimension = 3
def __init__(self, dimension=None):
UserList.__init__(self)
if dimension is not None:
self.dimension = int(dimension)
# flesh out the board by putting in None's
for i in range(self.dimension ** 2):
self.append(None)
def __getitem__(self, index):
if isinstance(index, types.TupleType):
(row, column) = index
index = row * self.dimension + column
return UserList.__getitem__(self, index)
def __setitem__(self, index, value):
if isinstance(index, types.TupleType):
(row, column) = index
index = row * self.dimension + column
UserList.__setitem__(self, index, value)
def index(self, value):
position = UserList.index(self, value)
row, column = divmod(position, self.dimension)
return (row, column)
b = Board(4)
b[1,0] = 3
print b.index(3)
(1, 0)
Use the existing tools when you can, and think about what functions you
might need. For example, clearing out the board.
-Arcege
--
------------------------------------------------------------------------
|* Michael P. Reilly, Release Manager | Email: arcege@shore.net |
*|* Salem, Mass. USA 01970 | |
*------------------------------------------------------------------------