> > Tenting the time spent by each approach (using time.clock()), with a > > file with about 100,000 entries, I get 0.03s for the loop and 0.05s > > for the listcomp. > > Anything else being equal, list comprehensions will be the faster > becuase they incur fewer name and attribute lookups. It will be the > same as the difference between a for loop and a call to map. A list > comprehension is basically an enhancement of map.
Not so. If you use the "dis" module to peek at the bytecode generated for a list comprehension, you'll see it's very similar to that generated for an explicit for-loop. The byte-code for a call to map is very different. Basically: both a for-loop and a list-comp do the looping in python bytecode, while a call to map will do the actual looping in C. >>> def comper(): ... return [i*2 for i in xrange(10)] ... >>> >>> dis.dis(comper) 2 0 BUILD_LIST 0 3 DUP_TOP 4 STORE_FAST 0 (_[1]) 7 LOAD_GLOBAL 0 (xrange) 10 LOAD_CONST 1 (10) 13 CALL_FUNCTION 1 16 GET_ITER >> 17 FOR_ITER 17 (to 37) 20 STORE_FAST 1 (i) 23 LOAD_FAST 0 (_[1]) 26 LOAD_FAST 1 (i) 29 LOAD_CONST 2 (2) 32 BINARY_MULTIPLY 33 LIST_APPEND 34 JUMP_ABSOLUTE 17 >> 37 DELETE_FAST 0 (_[1]) 40 RETURN_VALUE >>> >>> >>> >>> def maper(): ... return map(lambda i: i*2,xrange(10)) ... >>> dis.dis(maper) 2 0 LOAD_GLOBAL 0 (map) 3 LOAD_CONST 1 (<code object ...) 6 MAKE_FUNCTION 0 9 LOAD_GLOBAL 1 (xrange) 12 LOAD_CONST 2 (10) 15 CALL_FUNCTION 1 18 CALL_FUNCTION 2 21 RETURN_VALUE >>> Cheers, Ryan -- Ryan Kelly http://www.rfk.id.au | This message is digitally signed. Please visit r...@rfk.id.au | http://www.rfk.id.au/ramblings/gpg/ for details
signature.asc
Description: This is a digitally signed message part
-- http://mail.python.org/mailman/listinfo/python-list