有没有办法像 python 中的斐波那契数列一样对每个第 n 个列表求和并成为一个新列表?
is there a way to sum every nth list like a fibonacci sequance in python and became a new list?
假设我们有一个 l
列表,它由 5 个或更多元素组成,我想计算列表中的每第 n 个和,就像斐波那契数列一样
l=[1,5,6,7,2]
最后我想要一个新列表 l2
显示 l
列表
中每个第 n 个元素的总和
1+5=6
5+6=11
6+7=13
7+2=9
l2=[0,6,11,13,9]
我试过 list2= [sum(l[i:i+i[2]])for i in range(0,len(l),2)]
但它说 int not scriptable
我尝试了更多只是卡住请帮助
使用 itertools.tee
和 pairwise
的一种方式:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
[0, *map(sum, pairwise(l))]
输出:
[0, 6, 11, 13, 9]
你可以从 zip
做一个 list
理解,比如,
>>> l
[1, 5, 6, 7, 2]
>>> [0] + [x+y for x,y in zip(l, l[1:])]
[0, 6, 11, 13, 9]
或者代替列表理解,生成表达式,如
>>> [0, *(x+y for x,y in zip(l, l[1:]))]
[0, 6, 11, 13, 9]
假设我们有一个 l
列表,它由 5 个或更多元素组成,我想计算列表中的每第 n 个和,就像斐波那契数列一样
l=[1,5,6,7,2]
最后我想要一个新列表 l2
显示 l
列表
1+5=6
5+6=11
6+7=13
7+2=9
l2=[0,6,11,13,9]
我试过 list2= [sum(l[i:i+i[2]])for i in range(0,len(l),2)]
但它说 int not scriptable
我尝试了更多只是卡住请帮助
使用 itertools.tee
和 pairwise
的一种方式:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
[0, *map(sum, pairwise(l))]
输出:
[0, 6, 11, 13, 9]
你可以从 zip
做一个 list
理解,比如,
>>> l
[1, 5, 6, 7, 2]
>>> [0] + [x+y for x,y in zip(l, l[1:])]
[0, 6, 11, 13, 9]
或者代替列表理解,生成表达式,如
>>> [0, *(x+y for x,y in zip(l, l[1:]))]
[0, 6, 11, 13, 9]