Quantcast
Viewing latest article 1
Browse Latest Browse All 5

Answer by niles for With Maple I can writeseq(add(a[i], i=0..n), n=0..3); and get a[0], a[0]+a[1], a[0]+a[1]+a[2], a[0]+a[1]+a[2]+a[3] (*) If I write in Sage for n in range(4): add(a[i] for i in range(n)) I get the NameError: global name 'a' is not defined. If I first introduce the variable by a = var('a') then I get the TypeError: 'sage.symbolic.expression.Expression' object does not support indexing.How can I get the line (*) with Sage?Edit: This works:f=function('f') [add(f(i) for i in (0..n)) for n in (0..3)] gives [f(0), f(1) + f(0), f(2) + f(1) + f(0), f(3) + f(2) + f(1) + f(0)] So what I want is an equivalent for lists.a=list('a') [add(a[i] for i in (0..n)) for n in (0..3)]

Do you just want syntax to add the first `k` entries in a list? As @kcrisman alluded, you can get the first `k` entries by [slicing](http://stackoverflow.com/questions/509211/pythons-slice-notation), and then add them with add(a[:k+1]) So you could use it like this: sage: a = [n for n in range(5)] # a is a list sage: a [0, 1, 2, 3, 4] sage: seq = [add(a[:k+1]) for k in range(len(a))] sage: seq [0, 1, 3, 6, 10] This works as long as the entries of your list can be added. Here's an example with symbolic variables: sage: a = [var('a'+str(n)) for n in range(5)] sage: a [a0, a1, a2, a3, a4] sage: seq = [add(a[:k+1]) for k in range(len(a))] sage: seq [a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, a0 + a1 + a2 + a3 + a4]

Viewing latest article 1
Browse Latest Browse All 5

Trending Articles