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
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to