Thx, Robert. I did some tests: >>> xs = range(10000) >>> ys = range(0,20000,2) >>> def m1(x, count=100): ... for c in range(count): ... y = map(float, x) ... return y >>> def L1(x, count=100): ... for c in range(count): ... y = [float(z) for z in x] ... return y >>> def m2(xs, yx, count=100): ... for c in range(count): ... y = map(lambda x,y: x+y, xs, ys) ... return y >>> def L2(xs, yx, count=100): ... for c in range(count): ... y =[x+y for x,y in itertools.izip(xs, ys)] ... return y
>>> profile.run('m1(xs)') 105 function calls in 0.991 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 100 0.484 0.005 0.484 0.005 :0(map) 1 0.000 0.000 0.000 0.000 :0(range) 1 0.485 0.485 0.485 0.485 :0(setprofile) 1 0.022 0.022 0.506 0.506 <interactive input>:1(m1) 1 0.000 0.000 0.506 0.506 <string>:1(?) 1 0.000 0.000 0.991 0.991 profile:0(m1(xs)) 0 0.000 0.000 profile:0(profiler) >>> profile.run('L1(xs)') 5 function calls in 0.724 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.000 0.000 :0(range) 1 0.000 0.000 0.000 0.000 :0(setprofile) 1 0.724 0.724 0.724 0.724 <interactive input>:1(L1) 1 0.000 0.000 0.724 0.724 <string>:1(?) 1 0.000 0.000 0.724 0.724 profile:0(L1(xs)) 0 0.000 0.000 profile:0(profiler) >>> profile.run('m2(xs, ys)') 1000105 function calls in 6.171 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 100 3.336 0.033 6.149 0.061 :0(map) 1 0.000 0.000 0.000 0.000 :0(range) 1 0.000 0.000 0.000 0.000 :0(setprofile) 1 0.022 0.022 6.171 6.171 <interactive input>:1(m2) 1000000 2.813 0.000 2.813 0.000 <interactive input>:3(<lambda>) 1 0.000 0.000 6.171 6.171 <string>:1(?) 1 0.000 0.000 6.171 6.171 profile:0(m2(xs, ys)) 0 0.000 0.000 profile:0(profiler) >>> profile.run('L2(xs, ys)') 5 function calls in 0.418 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.000 0.000 :0(range) 1 0.000 0.000 0.000 0.000 :0(setprofile) 1 0.418 0.418 0.418 0.418 <interactive input>:1(L2) 1 0.000 0.000 0.418 0.418 <string>:1(?) 1 0.000 0.000 0.418 0.418 profile:0(L2(xs, ys)) 0 0.000 0.000 profile:0(profiler) First of all, map(float, some_list_of_numbers) didn't seems to be faster than [float(x) for x in some_list_of_numbers]. Maybe I did the test in a wrong way ? Secondly, [x+y for x,y in itertools.izip(xs, ys)] did go much faster than map(lambda x,y: x+y, xs, ys). The latter is not only the slowest one, but with an amazingly slow speed of 15 times slowdown. -- http://mail.python.org/mailman/listinfo/python-list