list comprehension syntax..?

Gary Herron gherron at islandtraining.com
Tue Aug 1 13:51:31 EDT 2006


Gregory Guthrie wrote:
> Sorry for a simple question- but I don't understand how to parse this use of 
> a list comprehension.
>
> The "or" clauses are odd to me.
>
> It also seems like it is being overly clever (?) in using a lc expression as 
> a for loop to drive the recursion.
>
> Thanks for any insight!
> Gregory
> -------------------------
>
> #  http://markbyers.com/moinmoin/moin.cgi/ShortestSudokuSolver
>
> def solve(board):
>  i=board.find('0')      # find next open cell
>  if i<0:                # done if none...
>      print board; exit("Done")
>  [ m in [(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)
>           or board[j] for j in range(81) ]
>      or solve(board[:i]+m+board[i+1:]) for m in'%d'%5**18 ] 
>   

The "or" clause (as you call it) has nothing to do with the list
comprehension.
The syntax being used here is
[ big_expression for m in something]
*and* the big_expression contains an "or" OPERATOR, with a
complex_expression on one side and solve(...) on the other, like this
complex_expression or solve(...)
*and* the complex_expression contains a nested list comprehension like this
m in nested_lc
*and* nested_lc is
[ugly_expression for j in range(81)]
*and* ugly_expression contains another "or" OPERATOR with ...
*and* sigh...

Whoever put this expression together has made something that is
completely unreadable, mostly unmaintainable, and not noticeably more
efficient than code that is readable and maintainable.

Moreover, all the work of creating the outer list seems to be wasted
since that list is just thrown out.

This is worse than "overly clever". Loops are for looping, list
comprehension is for building lists. It is bad programming practice to
use list comprehension for looping.

Hope that helps you,
Gary Herron

>
>
> ----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----
> http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
> ----= East and West-Coast Server Farms - Total Privacy via Encryption =----
>   




More information about the Python-list mailing list