Есть ли способ суммировать каждый n-й список, как секвенция Фибоначчи в python и стал новым списком? - PullRequest
0 голосов
/ 06 января 2020

скажем, у нас есть список l, он состоит из 5 или более элементов, которые я хочу вычислить для каждой n-й суммы в списке, как последовательность Фибоначчи

l=[1,5,6,7,2]

наконец, я хотел бы получить новый список l2, который показывает сумму каждого n-го элемента в списке 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 и я попробуйте еще много раз, чтобы застрял пожалуйста помогите

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Вы можете просто сделать list понимание из zip, например,

>>> 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]
0 голосов
/ 06 января 2020

В одну сторону, используя 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]
...