[Tutor] Re: indexing lists

Alan Gauld alan.gauld@gssec.bt.co.uk
Tue, 6 Jun 2000 15:49:41 +0100


> 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]]

Lets assume you use:

l = [[0,1,2],[3,4,5],[6,7,8]]

instead...

Now the 'row' is N/3 - ie 7 is in row 2, 5 in row 1 etc

the position within the row is index(n) of the row, 
thus:

row = l[int(N)/3] # force integer division
item = row.index(N)

> simpler [1, 2, 3, 4, 5, 6, 7, 8, 9] structure.

Another approach ius to use a dictionary.
brd = {	1:[0,[(2,3),(4,7),(5,9)]],
       	2:[0,[(1,3),(5,8)]],
	3:[0,[(1,2),(6,9),(5,7)]], etc...
	}

Where the content of the dictionary consists of:
+ the content of the cell 
	- unused = 0, 'X' = 1, 'O' = 2 say
+ a list of rows for that cell 
	- thus cell one has 3 rows formed by:
	  1,2,3 / 1,4,7 / 1,5,9

Or you could create a cell object to hold those things
as fields - probably nicer:

class cell:
   def __init__(self, rows, value=0):
     self.value = value	
     self.rows = rows

Now create a list of cells:

targets = [(1,2,3),(4,5,6),(7,8,9), # horizontals
	   (1,4,7),(2,5,6),(3,6,9), # verticals
	   (1,5,9),(3,5,7)]	    # diagonals

brd = []
rows = []
for i in range(1:10):
   # select the rows for this cell
   for t in targets:
      if i in t: rows.append(t)
   brd.append(Cell(rows))

You can then update the contents of a cell and extract 
the list of rows to check for that cell...

errr maybe, 
something like that might work :-)

Alan G.

-- 
=================================================
This post represents the views of the author 
and does not necessarily accurately represent 
the views of BT.