# list comprehension question

rusi rustompmody at gmail.com
Wed Oct 17 16:06:23 CEST 2012

```On Oct 17, 5:33 pm, Dave Angel <d... at davea.name> wrote:
> On 10/17/2012 12:43 AM, Kevin Anthony wrote:> Is it not true that list comprehension is much faster the the for loops?
>
> > If it is not the correct way of doing this, i appoligize.
> > Like i said, I'm learing list comprehension.

> list comprehensions CAN be much faster, but not necessarily.  The most
> complex a loop, the less likely it'll help much.

One-lining the comprehension seems to make a difference of about 10%
out here. Maybe Ive missed something? Seems too large…

# My original suggestion
def dot(p,q): return sum (x*y for x,y in zip(p,q))
def transpose(m): return zip(*m)
def mm(a,b): return mmt(a, transpose(b))
def mmt(a,b): return [[dot(ra, rb) for rb in b] for ra in a]

# One-liner (Thanks Hans for reminding me of sum)

def mm1(a,b): return [[sum([x*y for x,y in zip(ra,rb)]) for rb in
zip(*b)] for ra in a]

>>> t1=Timer("res=mm1(m,m)", setup="from __main__ import mm1, m")
>>> t1.timeit(1000)
12.276363849639893
>>> t0=Timer("res=mm(m,m)", setup="from __main__ import mm, m")
>>> t0.timeit(1000)
13.453603029251099
```