Gary Herron wrote: > 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. Isn't it an advantage considering speed of the execution? I have just compared the speed of an explicit loop with the speed of a list comprehension doing the same thing in another context to see it is much better to use the latter. In board solvers speed is vital, so isn't it a good practice to use a list comprehension for looping in this context, anyway?
Claudio > > 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 =---- >> -- http://mail.python.org/mailman/listinfo/python-list