On 15 February 2013 11:36, Tim Golden <m...@timgolden.me.uk> wrote: > On 15/02/2013 11:22, Oscar Benjamin wrote: >> Why not make board a list of lists. Then you can do: >> >> for row in board: >> for piece in row: >> >> rather than using range(). >> >> Or perhaps you could have a dict that maps position tuples to pieces, >> e.g.: {(1, 2): 'k', ...} > > I'm laughing slightly here because, at the monthly London Python > Dojo, we often find ourselves implementing board-game mechanics > of one sort or another: Boggle, Battleships, Sliding block, > Connect 4, Noughts-and-Crosses, even things like Game of Life > (which has a board of sorts). > > And the "how shall we represent the board?" question is pretty > much the first thing any team asks themselves. And you always > get someone in favour of lists of lists, someone for one long > list,
I always get confused when doing this about which of my coordinates needs to be multiplied (i.e. whether I am in Fortran or C order). > someone who likes a string, someone (me) who likes a sparse > dict keyed on coords, Clearly better than the others. > someone else likes nested defaultdicts, > and occasionally more outlandish schemes. > > We even went to the extent of having a Dojo a few months back > which was solely about implementing the ideal board for varying > characteristics, but we didn't come to any conclusions :) In this case the innermost loop of the program is over the pieces on the board. Clearly you want a data structure that allows you to iterate directly over them. (Actually since that loop is to calculate the score I would replace it with a function that computes the change in score as a result of each move). > (Also I seem to remember that the OP was advised earlier precisely > to abandon lists of lists in favour of something else). Actually the suggestion was for the list of lists (instead of a flat list). Oscar -- http://mail.python.org/mailman/listinfo/python-list