On Fri, 20 Aug 2010 09:51:08 am Pete wrote: [...] > Ah, so list comprehensions are a purely syntactic construct?
No, I don't think that's what Emile was trying to say. It's not like list comps are macros that are expanded into the explicit for-loop like that. All he is saying is that both the for-loop and the list comprehension loop over the list. There are some functional differences: for example, the list comp avoids needing to look up result.append over and over again. Because it knows it is dealing with a list, rather than some arbitrary object that conceivably might have some weird append method with strange side-effects, it can take optimizing short-cuts that aren't applicable to general for-loops. > I had the feeling there might be a performance benefit of some kind. If you write the for-loop in the most straight forward, obvious fashion, then there is a small but measurable performance cost from repeatedly looking up the append method. On the other hand, for-loops are more general -- you can call break to exit early, or continue to skip an iteration, so they're easier to optimize. There's no way to break out of a list comp early (other than raising an exception, which defeats the purpose). No matter how fast you can perform a loop, it's always faster to avoid it altogether, so this: seq = xrange(10000000) result = [] for i in seq: if i >= 10: break result.append(i%2) will be much faster than this: seq = xrange(10000000) result = [i%2 for i in seq if i < 10] Other than that, the speed of the loop itself is virtually the same as the speed of the list comprehension. -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor