[Tutor] doing maths on lists

Chris Begert cbeg at gmx.de
Mon Dec 20 14:19:13 CET 2010


Dave and Christian

Thanks a lot for the help, it looks like it works!

Chris


-------- Original-Nachricht --------
> Datum: Mon, 20 Dec 2010 07:32:45 -0500
> Von: Dave Angel <davea at ieee.org>
> An: Chris Begert <cbeg at gmx.de>
> CC: tutor at python.org
> Betreff: Re: [Tutor] doing maths on lists

> On 01/-10/-28163 02:59 PM, Chris Begert wrote:
> > Bonjour
> >
> > I have three lists with 65 float items and would like to do the
> following sum:
> >
> > L0 = ([sum(L0A[i]*cos(L0B[i]+L0C[i]*JME) for i in range(0,64,1))])
> >
> > So it just should do a sum across all the items in the list:
> >
> > L0A[0]*cos(L0B[0]+L0C[0]*JME)+ L0A[1]*cos(L0B[1]+L0C[1]*JME)+...
> > + L0A[64]*cos(L0B[64]+L0C[64]*JME)= some float number
> >
> >
> > However, I always get this error:
> > 		
> > TypeError: can't multiply sequence by non-int of type 'float'				
> >
> > I looked it up and there seems to be some solution using either the
> "for-in" command or the "map(int,...)" command but I just can't get it to
> work....
> >
> >
> > Any help will be very much appreciated :)
> >
> > Greetings from Sydney
> > Chris
> 
> Look up range(), and notice that the first and 3rd arguments default to 
> 0 and 1 respectively.  So you're just doing range(64), which gives you 
> the first 64 items in the list.  But you said there were 65, so why 
> didn't you use 65 ?
> 
> Where did you get that python expression?  If you just want a sum, 
> there's no need for the outer pair of square braces or parentheses.  As 
> it is, it'll correctly build a list of 1 item, which is the sum of all 
> but one term of the desired expression.
> 
> Anyway, the expression doesn't give an error, if you've really got those 
> three arrays of floats.  My guess is that you either copied the 
> expression wrong (use copy/paste), or you've got something else in those 
> lists.  Make a simple test case, and show the whole thing, including 
> imports:
> 
> 
> from math import cos
> 
> JME = 0.4
> L0A = [2.3, 4.65]
> L0B = [1.8, 2.2]
> L0C = [12.1, 4]
> limit = len(L0A)
> 
> L0 = sum(L0A[i]*cos(L0B[i]+L0C[i]*JME) for i in range(limit))
> 
> 
> print L0
> 
> runs fine with Python 2.6 on Linux, producing output of:
> 
> -1.52286725666
> 
> 
> DaveA

-- 
Neu: GMX De-Mail - Einfach wie E-Mail, sicher wie ein Brief!  
Jetzt De-Mail-Adresse reservieren: http://portal.gmx.net/de/go/demail


More information about the Tutor mailing list