searching a list of lists as a two-dimensional array?

Samuel Karl Peterson skpeterson at nospam.please.ucdavis.edu
Mon Feb 12 00:24:54 EST 2007


James Stroud <jstroud at mbi.ucla.edu> on Sun, 11 Feb 2007 16:53:16 -0800
didst step forth and proclaim thus:

> agent-s wrote:
> > Basically I'm programming a board game and I have to use a list of
> > lists to represent the board (a list of 8 lists with 8 elements each).
> > I have to search the adjacent cells for existing pieces and I was
> > wondering how I would go about doing this efficiently. Thanks
> >
> 
> This isn't very clear. What do you mean by "I have to search the
> adjacent cells for existing pieces"?
> 
> If piece is 1 and empty is 0 and piece is at ary[row][col]:
> 
> import operator
> srch = [(i,j) for i in [-1,0,1] for j in [-1,0,1] if (i,j) != (0,0)]
> is_adj = reduce(operator.or_, [ary[row+i][col+j] for (i,j) in srch]])

Wow, maybe it's just me (I'm a pretty bad programmer) but this is
where list comprehensions begin to look unreadable to me.  Here's a
C-like way to do it, (warning, untested in python):

for i in range(8):
    for j in range(8):
        for offset_i in range(-1,2):
            for offset_j in range(-1, 2):
                row = i + offset_i
                col = j + offset_j
                if (row < 0 or row > 7) or (col < 0 or col > 8) \
                   or ((row,col) == (i,j)):
                    continue
                # else do something with board[row][col]

I realize this is gross and un-Pythonic and does the same thing the
above code does, but it's probably the way I'd choose to do it :).
Then again, I've been negatively influenced by doing a game of life in
C a few months back.

-- 
Sam Peterson
skpeterson At nospam ucdavis.edu
"if programmers were paid to remove code instead of adding it,
software would be much better" -- unknown



More information about the Python-list mailing list