Velocity Reviews > Re: list comprehension question

# Re: list comprehension question

Dave Angel
Guest
Posts: n/a

 10-17-2012
On 10/16/2012 09:54 PM, Kevin Anthony wrote:
> I've been teaching myself list comprehension, and i've run across something
> i'm not able to convert.
>
> here's the original code for matrix multiplcation
>
> retmatrix = Matrix(self.__row,other.__col)
> for m in range(0,retmatrix.__row):
> for n in range(0,retmatrix.__col):
> product = 0
> for p in range(1,self.__col+1):
> product += (self.__matrix[m][p] * other.__matrix[p][n])
> retmatrix.__matrix[m][n] = product
>
> Here is what i have so far:
> retmatrix.__matrix = [[ product = product + (self.__matrix[m][p]*
> other.__matrix[p][n])
> if product else self.__matrix[m][p]* other.__matrix[p][n])
> for p in range(0,self.col)
> for n in range(0,self.col)]
> for m in range(0,self.__row)]
>
> But i know that isn't correct, can someone nudge my in the right direction?
>
>

The biggest thing to learn about list comprehensions is when not to use
them. I can't imagine how your latter version (even if correct) is
clearer than the first.

--

DaveA

rusi
Guest
Posts: n/a

 10-17-2012
On Oct 17, 7:14*am, Dave Angel <(E-Mail Removed)> wrote:
> On 10/16/2012 09:54 PM, Kevin Anthony wrote:
>
>
>
>
>
>
>
>
>
> > I've been teaching myself list comprehension, and i've run across something
> > i'm not able to convert.

>
> > here's the original code for matrix multiplcation

>
> > retmatrix = Matrix(self.__row,other.__col)
> > for m in range(0,retmatrix.__row):
> > * * for n in range(0,retmatrix.__col):
> > * * * * product = 0
> > * * * * for p in range(1,self.__col+1):
> > * * * * * * product += (self.__matrix[m][p] * other.__matrix[p][n])
> > * * * * retmatrix.__matrix[m][n] = product

>
> > Here is what i have so far:
> > retmatrix.__matrix = [[ product = product + (self.__matrix[m][p]*
> > other.__matrix[p][n])
> > * * * * * * * * *if product else self.__matrix[m][p]*other.__matrix[p][n])
> > * * * * * * * * *for p in range(0,self.col)
> > * * * * * * * * *for n in range(0,self.col)]
> > * * * * * * * * *for m in range(0,self.__row)]

>
> > But i know that isn't correct, can someone nudge my in the right direction?

>
> The biggest thing to learn about list comprehensions is when not to use
> them. *I can't imagine how your latter version (even if correct) is
> clearer than the first.
>
> --
>
> DaveA

Try rewriting using dot

from operator import mul
def dot(p,q):
return reduce(mul, [x*y for x,y in zip(p,q)]) # the [] can become
()