[Tutor] Pythonic nested lists
ajarncolin at gmail.com
Mon Oct 4 08:26:43 CEST 2010
Date: Tue, 28 Sep 2010 13:15:26 +0700
From: col speed <ajarncolin at gmail.com>
To: tutor at python.org
Subject: [Tutor] Pythonic nested lists
<AANLkTimdykbKzxAacbAAGpQ_fAZ50Ruy=bcr81dQXk0P at mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
I've been trying to write a programme that solves sudoku problems for a
while now. I'm getting close, but would like to ask a few questions about
the most pythonic way of doing some things.
I've decided to create nested lists (row order, column order and square
order) which correspond with dictionary keys - the values of which are the
numbers given in the puzzle - so I can loop through the dict in different
I think the first two are OK, but the square order list seems extremely
messy and I would love some pointers. What I have is as follows:
roworder = [[str(j)+str(i) for i in range(9)] for j in range(9)]
colorder = zip(*roworder)
#here comes the problem!
start, index = 0,0
sqorder = 
for i in range(9):
for j in range(start, start+3):
if index == 6:
index = 0
index += 3
if i == 2 or i == 5:
start += 3
Any comments at all would be gratefully received.
Thanks in advance
HI again, I realise that I should have included more information in the
above e-mail. Here goes:
a/ I have a 9*9 nested list called "rows", which contains the given numbers
in a sudoku puzzle - with "0"s where the blanks go.
b/ I create roworder (roworder = [[str(j)+str(i) for i in range(9)] for j in
range(9)]) - [["00" --> "08"], ["10" --> "18"] --> ["80" --> "88"]]
c/ I populate a dictionary ("dic") with keys from "roworder" and values from
d/ I loop through the dict, changing any value"0" to be set(range(1, 10))- a
list of "possible numbers".
e/ Then I do:
for i in roworder:
notPoss = set([dic[j] for j in i if type(dic[j]) == int])
for k in j:
if type(dic[k]) == set:
thus removing the numbers that exist in the row from the "possible numbers"
I need to do this for the columns and squares aswell, which is why I do:
colorder = zip(*roworder) - (create a nested list "column wise" rather than
and want to create a "square order" list - which is what the above mess
I hope this clarifies things.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Tutor