Re: For loop and list comprehension similarity
I think I like generator comprehension in this case better than either list comprehension or a filter because both of the latter create a new full result list before the loop even begins. At least I suppose they do. Also, I think Mitja's suggestion if not test: continue and Terry's filter function are more readable than comprehensions. It's not a contest though :-), all these variants are great, thank you all! Do you think this discussion is a proof that the following principle got violated, or do you think that loop with condition is not such an atomic thing to be subject to this: There should be one -- and preferably only one -- obvious way to do it. Cheers, Sergey. -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
[EMAIL PROTECTED] wrote: Do you think this discussion is a proof that the following principle got violated, or do you think that loop with condition is not such an atomic thing to be subject to this: There should be one -- and preferably only one -- obvious way to do it. Mitja's suggestion was the one obvious way. The others are all interesting, maybe even preferable in some cases, but I don't think most experienced Python programmers would be more likely to start with one of them than with the simple for-loop-with-explicit-test. -Peter -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
Peter Hansen [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] [EMAIL PROTECTED] wrote: Do you think this discussion is a proof that the following principle got violated, or do you think that loop with condition is not such an atomic thing to be subject to this: There should be one -- and preferably only one -- obvious way to do it. Mitja's suggestion was the one obvious way. The others are all interesting, maybe even preferable in some cases, but I don't think most experienced Python programmers would be more likely to start with one of them than with the simple for-loop-with-explicit-test. If by 'explicit-test' you mean a nested if-statement, then I agree. When I mentioned filter() as one way to avoid the obvious, I was aware that it creates an intermediate list that is usually not needed. (And if it is needed, then it should be name-assigned before the loop.) Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
For loop and list comprehension similarity
Hi All, I apologize if this was brought up before, I couldn't find any prior art :-). On more than one occasion, I found myself wanting to use a conditional loop like this (with Invalid syntax error, of course): for i in c if test: print i*2 ...because it's similar to the list comprehension construct: [i*2 for i in c if test] - Is this the intended difference in constructs? The available equivalent feels a bit awkward: for i in c: if test: print i*2 Just curious. Thanks! Sergey. -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
[EMAIL PROTECTED] wrote: On more than one occasion, I found myself wanting to use a conditional loop like this (with Invalid syntax error, of course): for i in c if test: print i*2 Maybe there's been a PEP, don't really know... Currently, the only sensible alternative is what you've written below: The available equivalent feels a bit awkward: for i in c: if test: print i*2 This indeed doesn't look nice, especially if you've got lots of code instead of just print. An alternative which avoids double indentation is for i in c: if not test: continue print i*2 -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
Thank you for replying, Mitja! That *is* a nice alternative. Do you think it's a good idea to ask on comp.python.devel if they would be interested in a PEP about this (provided there is none)? Cheers, Sergey. -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
On 2006-03-26, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: Hi All, I apologize if this was brought up before, I couldn't find any prior art :-). On more than one occasion, I found myself wanting to use a conditional loop like this (with Invalid syntax error, of course): for i in c if test: print i*2 ...because it's similar to the list comprehension construct: [i*2 for i in c if test] - Is this the intended difference in constructs? The available equivalent feels a bit awkward: for i in c: if test: print i*2 for j in [i*2 for i in c if test]: print j -- Grant Edwards grante Yow! .. I wonder if I at ought to tell them about my visi.comPREVIOUS LIFE as a COMPLETE STRANGER? -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
[EMAIL PROTECTED] writes: On more than one occasion, I found myself wanting to use a conditional loop like this (with Invalid syntax error, of course): for i in c if test: print i*2 ...because it's similar to the list comprehension construct: [i*2 for i in c if test] Why not combine the two: for i in [j for j in c if test]: print i*2 -- \ I got food poisoning today. I don't know when I'll use it. | `\ -- Steven Wright | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
Why not combine the two: I guess because (at least in source code) you're doing a loop twice :-). I don't know what a compiler would do. I think though that the for i in c if test: construct is more readable and maybe can even be better optimized. Thanks! Sergey. -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
Rather than a list comprehension, it would be faster and more memory-efficient to use a generator comprehension. Just change the square brackets to parentheses: for j in (i*2 for i in c if test): print j Grant Edwards wrote: On 2006-03-26, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: Hi All, I apologize if this was brought up before, I couldn't find any prior art :-). On more than one occasion, I found myself wanting to use a conditional loop like this (with Invalid syntax error, of course): for i in c if test: print i*2 ...because it's similar to the list comprehension construct: [i*2 for i in c if test] - Is this the intended difference in constructs? The available equivalent feels a bit awkward: for i in c: if test: print i*2 for j in [i*2 for i in c if test]: print j -- http://mail.python.org/mailman/listinfo/python-list
Re: For loop and list comprehension similarity
[EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] Why not combine the two: I guess because (at least in source code) you're doing a loop twice :-). I don't know what a compiler would do. I think though that the for i in c if test: construct is more readable and maybe can even be better optimized. There are also the filter and ifilter functions: for i in filter(testfunc, c): tjr -- http://mail.python.org/mailman/listinfo/python-list