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