Yves Dorfsman wrote:
In the following script, m1() and m2() work fine. I am assuming m2() is
faster although I haven't checked that (loops through the list twice
instead of once).
Well, let's check it:
$ python -m timeit -s "import x" "x.m1()"
100000 loops, best of 3: 6.43 usec per loop
$ python -m timeit -s "import x" "x.m2()"
100000 loops, best of 3: 8.34 usec per loop
As it turns out, m1 is faster than m2. The reason is that list
comprehensions do the loop in C, whereas the for-append pattern does the
loop on the Python level.
Now what I am trying to do is something like m3(). As currently written
it does not work, and I have tried different ways, but I haven't managed
to make it work.
Is there a possibility ? Or is m2() the optimum ?
[...]
def m1():
colours = [ e['colour'] for e in l ]
nums = [ e['num'] for e in l ]
def m2():
colours = []
nums = []
for e in l:
colours.append(e['colour'])
nums.append(e['num'])
#def m3():
# colours, nums = [ e['colour'], e['num'] for e in l ]
m3 doesn't work because you're building a list of 10 color/number pairs
that you're trying to unpack that into just two names. The working
"derivative" of m3 is m1, which is the most natural, fastest and
clearest solution to your problem.
HTH,
--
Carsten Haese
http://informixdb.sourceforge.net
--
http://mail.python.org/mailman/listinfo/python-list