On 03/16/2017 10:12 AM, Alan Gauld via Tutor wrote:
On 16/03/17 05:11, Aaliyah Ebrahim wrote:

def sum2(N):

    b = np.arange(1,N+1,1)
    mylist = [ ]
    for i in b:
        terms = 2*(1+3**(i-1))
        a = mylist.append[terms]
    return np.sum(mylist)

terms = 2*(1+3**(i-1))----> 9         mylist.append[terms]     10
return np.sum(mylist)     11
TypeError: 'builtin_function_or_method' object is not subscriptable

You are using [] to call append instead of ().
It should be
a = mylist.append(terms)

However, most of your function could be replaced by
a list comprehension:

def sum2(N):
    mylist = [2*(1+3**(i-1)) for i in np.arange(1,N+1,1) ]
    return np.sum(mylist)

And I'm not sure the np versions of the functions will
give much advantage over the standard range() and sum()

Any time you see a structure like

aList = []
for <some iteration>
   aList.append(<some expression>)

You should consider whether a comprehension would
be more suitable


Alternatively, you could even use a generator expression (essentially, just omitting the brackets from Alan's suggestion) and avoid keeping mylist in memory like this:

def sum2(N):
    return np.sum(2*(1+3**(i-1)) for i in np.arange(1,N+1,1))

In addition, I'd agree with Alan that the advantage of using numpy functionality in this function seems quite questionable. You'd probably get pretty much the same performance with just:

def sum2(N):
    return sum(2*(1+3**(i-1)) for i in range(1,N+1,1))

Best,
Wolfgang

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to